2016-10-17 3 views
2

Mein Dialog ist eine Aktivität mit dem Thema android:theme="@android:style/Theme.Holo.Dialog" definiert in AndroidManifest.xml. Als ich die Aktivität von Activity A mit Start:Aktivität startActivityForResult löst kein onActivityResult aus

Intent myIntent = new Intent(this, MyActivityAsDialog.class); 
startActivityForResult(myIntent, REQUEST_DIALOG_ID); 

hatte ich erwartet, dass nach dem Aufruf:

setResult(Activity.RESULT_OK); 
finish(); 

In MyActivityAsDialogonActivityResult() auf Activity A auslösen würde, wo ich die Aktivität.

enter image description here

Problem ist, dass MyActivityAsDialog richtig gestartet wird, ist es richtig beendet ist, aber onActivityResult vom Activity A nie aufgerufen wird.

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    Log.d("EditImageActivity:", "onActivityResult............"); 
    //code to handle return values comes here 
} 

AndroidManifest.xml:

<activity 
     android:name="my.package.MyActivityAsDialog" 
     android:label="@string/title_activity_choose_color_dialog" 
     android:theme="@android:style/Theme.Holo.Dialog" 
     android:parentActivityName="my.package.ActivityA" > 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value="my.package.ActivityA" /> 
</activity> 

MyActivityAsDialog:

public class MyActivityAsDialog extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     setContentView(R.layout.activity_choose_color_dialog);  
     setTitle(R.string.colors_content_description); 
     //and others setup stuff 
    } 

    //from layout.xml 
    public void cancel(View view) { 
     setResult(Activity.RESULT_OK); 
     finish(); 
    } 
} 

myActivityAsDialog Layout (activity_my_activity_as_dialog.xml)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical" 
tools:context=".ChooseColorDialogActivity" > 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:onClick="cancel" 
     android:text="@android:string/cancel" /> 

</LinearLayout> 

ACTIVITYA:

public class ActivityA extends Activity { 

    public static final int REQUEST_COLOR_DIALOG = 0xDAFFDEBB; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_activity_a); 
     //and other setup stuff 
    } 

    //from layout.xml 
    public void selectColor(View view) { 
     Intent myIntent = new Intent(this, MyActivityAsDialog.class);  
     startActivityForResult(myIntent, REQUEST_COLOR_DIALOG); 
    } 

} 
+0

Was ist der LaunchMode von MyActivityAsDialog? –

+0

@shuvro keine spezielle definieren (so ist es Standard-Startmodus) –

+0

Können Sie mehr Code hinzufügen – Stefan

Antwort

2

In XML-Datei von MyActivityAsDialog.class,

unterhalb der Linie, in oberste Ansicht hinzufügen
tools:context=".ActivityA" 
+0

Ich sollte wirklich 'ActivityA' für das Layout von' MyActivityAsDialog' verwenden? –

+0

Ja.Sie sollten ActivityA Kontext für MyActivityAsDialogs Layout (XML) Datei verwenden –

+0

uhm ok, aber das macht keine Änderungen ... ich kann nicht glauben, ich bin zu dumm, um diese einfache Aufgabe zu tun, ich weiß, ich habe es dozend getan Zeiten vor ... –

1

Es gibt mehrere Dinge, können Sie versuchen,

  1. gesetzt android:launchMode="singleTop" für MyActivityAsDialog
  2. sicher sein REQUEST_DIALOG_ID Wert größer als 0
+0

das macht keine änderungen ... ich kann nicht glauben, dass ich zu blöd bin, um diese einfache aufgabe zu machen, ich weiß, dass ich es schon öfters gemacht habe ... –

+1

argh - blöd mich - ich habe vergessen, dass 0xDAFFDEBB ist kleiner als Null !!! aber @nougat Liebhaber gab mir den Hinweis darauf! –

1

Sie ur Satz Ergebnis innerhalb der Methode setzen

cancel(View view) 

Wo Sie diese Methode aufrufen. Überprüfen Sie, ob diese Methode ordnungsgemäß aufruft oder nicht.

+0

es heißt richtig - eine Menge (nicht in dieser Antwort erwähnt) Zeug passiert, wenn gedrückt. Die Methode wird im Layout auf einer Schaltfläche definiert. –

Verwandte Themen