2013-03-28 11 views
11

Ich versuche, Daten von untergeordneten Aktivitäten an Eltern zu senden. Aber irgendwie wird OnActivityResult (..) nicht aufgerufen. hier ist der CodeonActivityResult-Methode wird nicht Android

Elternteil Aktivität

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; 
       } 
      } 

Kinder Aktivität: Ich ausgewählten Wert im setResult gesetzt sehen kann(). Aber nach dem Ende der Kinderaktivität geht es nicht zurück zur Elternaktivität.

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

funktionierte nicht nach dem Versuch Intent data = getIntent() in untergeordneten Aktivität – Chintan

+0

Versuchen Sie einige 'System.out.println()' s in 'onActivityResult()' hinzufügen, um zu sehen, welcher Code tatsächlich ausgeführt wird. Sobald Sie es eingrenzen, sollten Sie in der Lage sein, das Problem zu lösen. Wenn nicht, bearbeiten Sie Ihren Post und teilen Sie uns mit, welche Zeilen gerade ausgeführt werden. – Don

+0

Also, wenn ich berühre Ereignis wird auf Eltern-Aktivität aufgerufen .. es geht in onTouch() und wenn es startActivityForResult (intention, 1) Zeile ausgeführt wird, geht es auf OnActivityResult() mit Anforderungscode ist 1. Danach springt es zu Child Aktivität und laden Sie es. Nach dem Auswählen eines Werts aus ChildActivity.OnItemClick() .. beendet es die untergeordnete Aktivität, kehrt aber nie zu onActivityResult() des übergeordneten Objekts zurück. Hoffe, es ist klar – Chintan

Antwort

10

ich den Fehler gefunden. Ich hatte unterhalb der Linie in manifest.xml für Kinderaktivität.

 android:launchMode="singleInstance" 

nach dem Entfernen dieser Zeile. es funktioniert wie ein Zauber !!!

Vielen Dank für Ihre Anregungen und Anregungen.

+0

dieser eine löste das gleiche Problem wie meins. +1 – JayR

+1

Ich hatte Singletask. Durch die Änderung in singleTop wurde das Problem behoben. –

0

Nicht sicher, ob dies der Fall ist, aber wenn die Aktivität Kind beginnen stellen Sie sicher, startActivityForResult(intent) verwenden, statt startActivity();

+0

Ich verwende Intent intent = new Intent (Parents.this, Child.class); startActivityForResult (Absicht, 1); – Chintan

+0

nur Extrateil Mutter Aktivität hat unter Methode \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

Ich habe Ihren Code getestet und es funktioniert gut auf meiner Seite. Ich bin in der Lage, Daten aus Child-Aktivität zu übergeben und in OnActivityResult zu empfangen. Vielleicht ist selectedItemList leer? –

51

Für jeden, der mit demselben Problem festhängt, ein Symptom, das nicht onActivityResult empfängt, können folgende Fälle dieses Problem verursachen.

  • Check Sie startActivityForResult() korrekt verwenden, verwenden startActivity() nicht.
  • Wenn Sie etwas in onBackPressed Methode überschreiben, muss super.onBackPressed(); auf der letzten der Methode positioniert werden, nicht in der ersten Zeile. (mein Fall, um 5 Stunden zu verbringen)
  • entfernen Sie android:launchMode="singleInstance" in manifest oder gleichwertigem Argument, um eine Absicht zu schaffen.
  • entfernen Sie noHistory="true" in Manifest der aufgerufenen Aktivität.
  • überprüfen setResult() wird verpasst.
  • finish() wird aufgerufen, um die Aktivität zu schließen. Verwenden Sie finishActivity(), um die angerufenen Aktivitäten zu schließen.
  • verwenden Sie mehr als Null. negativer Wert funktioniert nicht.
+0

Dies ist eine sehr nützliche Liste zu überprüfen. Danke – Metatron

+0

Mein Fall ist das Setzen der angerufenen Aktivität "Android: launchMode =" singleTask "", und entfernen Sie es funktioniert :) – bony

+0

Vielen Dank – Piyush

0

OnPuase bewirkte onActivityResult.

Einer der Ecke Fall könnte sein:
meinem Fall war anders und dumm: Das Problem in onPause war, rief beenden und die Aktivität beenden. entfernt das und funktioniert gut.

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

Ändern mein Manifest für den anrufenden Aktivität android:launchMode="singleInstance"-android:launchMode="singleTop" Fest für mich das Problem.

-1

und die Absicht, die neue avtivity starten verwendet, um nicht-Flag Intent.FLAG_ACTIVITY_NEW_TASK, weil nach android developer Dokumentation eingestellt werden:

Dieses Flag kann nicht verwendet werden, wenn der Anrufer ein Ergebnis aus die Aktivität gestartet anfordernden wird .

+0

Der Link in Ihrer Antwort muss den Link Text korrigiert haben, danke. –

-1

entfernen OnActivityResult() Verfahren in der Hauptklasse, es funktioniert perfekt ... MainActivity - >>>> Fragmente

1

Verwenden singleTop statt singleInstace als launchMode wie es behauptet die Aktivität in der gleichen Aufgabe.

Verwandte Themen