2013-03-28 13 views
11

Sto tentando di inviare dati dall'attività figlio a padre. Ma in qualche modo, onActivityResult (..) non viene chiamato. qui è il codiceIl metodo onActivityResult non viene chiamato Android

attività Parent

selectedText.setOnTouchListener(new OnTouchListener() { 



    public boolean onTouch(View v, MotionEvent event) { 
        if (event.getActionMasked() == MotionEvent.ACTION_DOWN) { 
         Intent intent = new Intent(Parents.this,Child.class); 
         startActivityForResult(intent, 1); 
        } 
        return true; 
       } 
      }); 


     @Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
      switch (requestCode) { 
      case 1: 
       if (resultCode == RESULT_OK) { 
        if (data.hasExtra("selText")) { 
         selectedText.setText(data.getExtras().getString(
           "selText")); 

        } 
        break; 
       } 
      } 

Bambino attività: posso vedere il valore selezionato impostato nel setResult(). Ma dopo aver terminato l'attività del bambino, non tornerà all'attività dei genitori.

textListView.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int myItemInt, 
        long arg3) { 
       selectedFromList =(String) (textListView.getItemAtPosition(myItemInt)); 
       Intent data = new Intent(); 
       data.putExtra("selText", selectedFromList); 
       setResult(RESULT_OK,data); 
       finish(); 
      } 
     }); 
+0

non ha funzionato dopo aver provato Intent data = getIntent() nell'attività figlio – Chintan

+0

Provare ad aggiungere alcuni 'System.out.println()' 's in 'onActivityResult()' per vedere quale codice viene effettivamente eseguito. Una volta ristretto, dovresti essere in grado di capire il problema. In caso contrario, modifica il tuo post e indicaci quali linee vengono eseguite. – Don

+0

Quindi quando tocco evento viene chiamato su attività padre. Entra in onTouch() e quando esegue la riga startActivityForResult (intent, 1), passa a onActivityResult() con il codice di richiesta è 1. Dopodiché passa a Child Attività e caricarlo. Dopo aver selezionato il valore da ChildActivity.OnItemClick(), termina l'attività figlio ma non ritorna mai su onActivityResult() di parent. Spero sia chiaro – Chintan

risposta

10

ho trovato l'errore. Ho avuto sotto la riga in manifest.xml per l'infanzia.

 android:launchMode="singleInstance" 

dopo aver rimosso questa linea. sta funzionando come un fascino !!!

Grazie per l'input e i suggerimenti.

+0

questo risolveva lo stesso problema del mio. +1 – JayR

+1

Ho avuto singletask. La modifica di singleTop ha risolto il problema. –

0

Non so se questo è il vostro caso, ma quando si inizia l'attività bambino assicurarsi di utilizzare startActivityForResult(intent), invece di startActivity();

+0

Sto usando Intent intent = new Intent (Parents.this, Child.class); startActivityForResult (intent, 1); – Chintan

+0

parte l'attività genitore unico extra ha sotto metodo \t @Override \t protected void onPause() { \t \t this.overridePendingTransition (R.anim.fade, R.anim.fade_right); \t \t this.overridePendingTransition (R.anim.right_in, R.anim.right_out); \t \t super.onPause(); \t} – Chintan

+0

Ho testato il tuo codice e funziona bene dalla mia parte. Sono in grado di trasferire i dati dall'attività figlio e riceverli in onActivityResult. Forse selectedItemList è vuoto? –

51

Per chi soffre dello stesso problema, un sintomo per non ricevere onActivityResult, i seguenti casi possono causare questo problema.

  • controllo si utilizza startActivityForResult() correttamente, non utilizzare startActivity().
  • se si esegue qualcosa nel metodo sostituito onBackPressed, super.onBackPressed(); deve essere posizionato nell'ultimo metodo, non nella prima riga. (il mio caso per trascorrere 5 ore)
  • rimuovere android:launchMode="singleInstance" in argomento manifest o equivalente per creare un intent.
  • remove noHistory="true" in manifest of the callee activity.
  • controllo setResult() mancato.
  • finish() viene chiamato per chiudere l'attività. utilizzare finishActivity() per chiudere l'attività del chiamato.
  • utilizzare requestCode più di zero. il valore negativo non funziona.
+0

Questo è un elenco molto utile da verificare. Grazie – Metatron

+0

Il mio caso sta impostando l'attività chiamata "android: launchMode =" singleTask "", e rimuoverlo è funzionante :) – bony

+0

Grazie mille – Piyush

0

OnPuase ha effetto suActivityResult.

Uno dei casi angolo potrebbe essere:
il mio caso era diverso e stupido: Il problema era in onPause, finitura denominata e terminare l'attività. rimosso e funziona bene.

@Override 
protected void onPause() { 
    super.onPause(); 
    finish(); // this line causing the issue removed it. 
} 
1

cambiando il mio manifesto per l'attività di chiamata android:launchMode="singleInstance"-android:launchMode="singleTop" risolto il problema per me.

-1

e l'intento che ha usato per lanciare nuovi Avtivity non può essere impostato bandiera Intent.FLAG_ACTIVITY_NEW_TASK, perché come da android developer documentazione:

Questo flag non può essere utilizzato quando il chiamante richiede un risultato da l'attività in fase di lancio .

+0

Il link nella tua risposta deve avere il testo del link corretto, grazie. –

-1

Rimuovere OnActivityResult() metodo nella classe principale, funziona perfettamente ... MainActivity - >>>> Frammenti

1

Usa singleTop invece di singleInstace come launchMode in quanto mantiene l'attività nello stesso compito.

Problemi correlati