Autore Topic: Richiamare oggetti  (Letto 585 volte)

Offline zKivo

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    mac os x
Richiamare oggetti
« il: 12 Agosto 2013, 14:22:56 CEST »
0
Salve, ho un problema banalissimo. Praticamente io creo oggetti nel metodo onCreate e devo richiamarli nel metodo onClick del mio button per poterli utilizzare... Ma come?
Codice (Java): [Seleziona]
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         Button bt1 = (Button) findViewById(R.id.button1);
         Button bt2 = (Button) findViewById(R.id.button2);
         Button bt3 = (Button) findViewById(R.id.button3);
         EditText display = (EditText) findViewById(R.id.editText1);
         StringBuffer stespr = new StringBuffer("");
         String espr = new String(stespr);
        display.setText(espr);
       
        bt1.setOnClickListener(new View.OnClickListener() {
                        public void onClick(View v) {

                                espr.concat("1");
                                display.setText(espr);
                               
                        }
                });
       
    }

so il motivo dell'errore, ma non so come risolverlo! sono i due oggetti espr e display del metodo onClick che mi danno errore, perché non li ho richiamati nel metodo... ma come faccio?

Offline vincenzoc

  • Utente junior
  • **
  • Post: 148
  • Respect: +47
    • Google+
    • cerminarav
    • Mostra profilo
    • Mie applicazioni sul Play Store
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Vincenzo Cerminara
  • Sistema operativo:
    Arch Linux
Re:Richiamare oggetti
« Risposta #1 il: 12 Agosto 2013, 15:12:34 CEST »
0
Dovresti riportare l'errore per poterti aiutare.
In questo caso comunque è probabile che tu riceva il messaggio "Cannot refer to a non-final variable inside an inner class...". In tal caso risolvi così:
Codice (Java): [Seleziona]
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button bt1 = (Button) findViewById(R.id.button1);
        Button bt2 = (Button) findViewById(R.id.button2);
        Button bt3 = (Button) findViewById(R.id.button3);
        final  EditText display = (EditText) findViewById(R.id.editText1);
        StringBuffer stespr = new StringBuffer("");
        final String espr = new String(stespr);
        display.setText(espr);
       
        bt1.setOnClickListener(new View.OnClickListener() {
                        public void onClick(View v) {

                                espr.concat("1");
                                display.setText(espr);
                               
                        }
                });
       
    }
Ringrazia chi ti aiuta sul forum con l'apposito pulsante :P
Scarica Yazzy

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:Richiamare oggetti
« Risposta #2 il: 12 Agosto 2013, 16:14:28 CEST »
0
Gli oggetti utilizzati all'interno della classe anonima associata all'on-click devono essere globali a livello di activity, in questo modo puoi riferirti ad essi.
Es:

Codice (Java): [Seleziona]
public class ActivityPippo extends Activity {

  EditText display;
  String espr;

  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button bt1 = (Button) findViewById(R.id.button1);
    Button bt2 = (Button) findViewById(R.id.button2);
    Button bt3 = (Button) findViewById(R.id.button3);

    display = (EditText) findViewById(R.id.editText1);
    espr = "";
    display.setText(espr);
       
    bt1.setOnClickListener(new View.OnClickListener() {
      public void onClick(View v) {
        ActivityPippo.this.espr = ActivityPippo.this.espr.concat("1");
        ActivityPippo.this.display.setText(ActivityPippo.this.espr);
      }
    });        
  }

  //...
}

Offline zKivo

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    mac os x
Re:Richiamare oggetti
« Risposta #3 il: 13 Agosto 2013, 09:37:08 CEST »
0
Grazie Sakazaki, ho risolto  :D