2013-11-21 16 views
8

Voglio chiamare un metodo da mainactivity in altre attività. Per questo, ho studiato molto e ho trovato che usare OnActivityResult è l'opzione migliore. Qualcuno può spiegare come usare questo metodo con l'aiuto di un esempio? Ho attraversato domande simili ma le ho trovate confuse. Grazie!Utilizzare onactivityresult android

MODIFICA: ho una finestra di dialogo personalizzata nella mia app. Chiede agli utenti se vogliono iniziare o meno un nuovo gioco e ha due pulsanti sì e no. Voglio implementare il metodo sopra solo per ottenere il pulsante premuto.

risposta

28

Definire costante

public static final REQUEST_CODE = 1; 

Chiamate la vostra attività di dialogo personalizzato utilizzando intento

Intent intent = new Intent(Activity.this, 
        CustomDialogActivity.class); 
      startActivityForResult(intent , REQUEST_CODE); 

Ora usano onActivityResult per recuperare il risultato

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     try { 
      super.onActivityResult(requestCode, resultCode, data); 

      if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) { 

       String requiredValue = data.getStringExtra("Key"); 
      } 
     } catch (Exception ex) { 
      Toast.makeText(Activity.this, ex.toString(), 
        Toast.LENGTH_SHORT).show(); 
     } 

    } 

Nell'uso dialogo un'attività personalizzata questo codice per impostare risultato

Intent intent = getIntent(); 
intent.putExtra("key", value); 
setResult(RESULT_OK, intent); 
finish(); 
+0

Cosa dovrei usare nella mia finestra di dialogo personalizzata? –

+0

abbiamo impostato requestCode su 1 se tutto va bene, quindi RESULT_OK sarà 1 quindi in attivitàRisultato possiamo verificare se (requestCode == RESULT_OK). Per il risultato dell'impostazione abbiamo utilizzato setResult nell'attività di dialogo personalizzata. possiamo inserire alcuni dati con una coppia chiave-valore come menzionato sopra. Per ottenere che i dati in onActivityResult utilizzino il nome di questa chiave per recuperarne il valore. –

3
+0

Grazie per la rapida risposta. Ho già seguito l'esempio developer.android.com. Ma l'ho trovato confuso. Potete per favore darmi un esempio con riferimento alla mainactivity e ad altre attività. Sono un principiante. –

+1

Leggi questo ---- http: //landandroideasily.blogspot.in/2013/03/starting-activity-for-result-in-android.html http://android-er.blogspot.in/2011/08 /return-result-to-onactivityresult.html – vinay

0

Avviare l'Activity:

si ha bisogno di passare un ulteriore argomento intero al startSubActivity() method.You può farlo definendo una costante o semplicemente inserendo un intero. L'argomento intero è un "codice di richiesta" che identifica la tua richiesta. Quando ricevi il risultato Intent, il callback fornisce lo stesso codice di richiesta in modo che la tua app possa identificare correttamente il risultato e determinare come gestirlo.

static final int ASK_QUESTION_REQUEST = 1; 
// Create an Intent to start SecondActivity 
Intent askIntent = new Intent(FirstActivity.this, SecondActivity.class); 

// Start SecondActivity with the request code 
startActivityForResult(askIntent, ASK_QUESTION_REQUEST); 

restituire il risultato:

Dopo aver completato il lavoro in seconda classe di attività è sufficiente impostare il risultato e chiamare che l'attività da dove viene e, infine, non dimenticate di scrivere finitura) dichiarazione (.

// Add the required data to be returned to the FirstActivity 
      sendIntent.putExtra(Result_DATA, "Your Data"); 

      // Set the resultCode to Activity.RESULT_OK to 
      // indicate a success and attach the Intent 
      // which contains our result data 
      setResult(RESULT_OK, sendIntent); 

      // With finish() we close the SecondActivity to 
      // return to FirstActivity 
      finish(); 

ricevere il Risultato:

volta finito con la successiva attività e ritorna, il sistema chiama il metodo onActivityResult() della vostra attività. Questo metodo include tre argomenti:

@Il codice di richiesta passato a startActivityForResult(). @Un codice risultato specificato dalla seconda attività. Questo è RESULT_OK se l'operazione è andata a buon fine o RESULT_CANCELED se l'operazione non è riuscita @ Un intento che contiene i dati dei risultati.

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    // check if the request code is same as what is passed here it is 1 
    if (requestCode == ASK_QUESTION_REQUEST) { 
     // Make sure the request was successful 
     if (resultCode == RESULT_OK) { 
      final String result = data.getStringExtra(SecondActivity.Result_DATA); 

      // Use the data - in this case display it in a Toast. 
      Toast.makeText(this, "Result: " + result, Toast.LENGTH_LONG).show(); 
     } 
    } 
} 

Per maggiori dettagli pls vedere questa dimostrazione Getting a Result from An Activity

0

1.In la classe FirstActivity scrittura seguente codice per il passaggio alla seconda attività con intenti.

Intent i = new Intent(this, SecondActivity.class); 
startActivityForResult(i, 100); 

2.In tua secondActivity classe scrittura seguente codice per onClick Evento Per esempio: In secondActivity se si desidera inviare di nuovo i dati:

Intent intent= new Intent(); 
intent.putExtra("result",result); 
setResult(RESULT_OK,intent); 
finish(); 

3.Now nel codice seguente classe FirstActivity write per il metodo onActivityResult().

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    if (requestCode == 100 && resultCode == Activity.RESULT_OK){ 
      String result=data.getStringExtra("result"); 
      Log.e("Result",result); 
    } 
} 
Problemi correlati