Autore Topic: Chiarimento Intent e onClickListener  (Letto 300 volte)

Offline flashman

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
Chiarimento Intent e onClickListener
« il: 22 Gennaio 2015, 11:02:02 CET »
0
Salve a tutti, avrei bisogno di un chiarimento in merito al lancio di una nuova activity.

Il mio codice e' il seguente :
Codice (XML): [Seleziona]
public void onClick (View view) {
        Intent i = new Intent(this, ActivityTwo.class);
        i.putExtra("Value1", "This value one for ActivityTwo ");
        i.putExtra("Value2", "This value two ActivityTwo");
        startActivityForResult(i, REQUEST_CODE);
    }

Banalissimo. Con onClick dichiarato staticamente nel file xml.

Se dichiaro tutto dinamicamente :

Codice (XML): [Seleziona]
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn = (Button) findViewById(R.id.button0);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(this, ActivityTwo.class);
                i.putExtra("Value1", "This value one for ActivityTwo ");
                i.putExtra("Value2", "This value two ActivityTwo");
                startActivityForResult(i, REQUEST_CODE);
            }
        });

    }

La riga : Intent i = new Intent(this, ActivityTwo.class); mi viene segnalata com errore.

Ho risolto con :Intent i = new Intent(getBaseContext(), ActivityTwo.class) ma confesso non ho capito perche'.

Il contesto e' per me un argomento nuovo. Avevo usato this semrpe.

Potreste chiarirmi la cosa o indirizzarmi a una discussione dove si chiarisce?


Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 717
  • Respect: +151
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Chiarimento Intent e onClickListener
« Risposta #1 il: 22 Gennaio 2015, 14:28:29 CET »
+1
Quando tu scrivi

Codice (Java): [Seleziona]
btn.setOnClickListener(new View.OnClickListener() {
stai creando un'istanza di classe anonima, per cui il this fa riferimento a quell'istanza e non all'activity.

In pratica è come scrivere

Codice (Java): [Seleziona]
class Pippo implements View.OnClickListener {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(this, ActivityTwo.class); //Errore: this fa riferimento all'istanza di Pippo, non di Activity!
                i.putExtra("Value1", "This value one for ActivityTwo ");
                i.putExtra("Value2", "This value two ActivityTwo");
                startActivityForResult(i, REQUEST_CODE);
            }
}

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn = (Button) findViewById(R.id.button0);

        btn.setOnClickListener(new Pippo());

    }

Una soluzione alternativa alla tua è

Codice (Java): [Seleziona]
  Intent i = new Intent(NomeClasseActivity.this, ActivityTwo.class);
Dove NomeClasseActivity è il nome della classe che rappresenta l'activity.

Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline flashman

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
Re:Chiarimento Intent e onClickListener
« Risposta #2 il: 22 Gennaio 2015, 14:57:38 CET »
0
Grazie mille. Mi hai chiarito la cosa.

Vedro' di utilizzare per capire meglio anche la tua alternativa.

Grazie ancora.