活动startActivityForResult不会触发onActivityResult

时间:2016-10-17 11:31:51

标签: android

我的对话框是android:theme="@android:style/Theme.Holo.Dialog"中定义的主题为AndroidManifest.xml的活动。当我从Activity A开始活动时:

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

在调用之后我曾预料到:

setResult(Activity.RESULT_OK);
finish();

MyActivityAsDialog onActivityResult()会触发Activity A我启动活动的MyActivityAsDialog

enter image description here

问题是,onActivityResult已正确启动,已正确完成,但Activity A中的@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 } 从未被调用。

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

的AndroidManifest.xml:

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

activity_my_activity_as_dialog.xml

myActivityAsDialog 布局(<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>

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

}

ActivityA:

{{1}}

3 个答案:

答案 0 :(得分:2)

在MyActivityAsDialog.class的xml文件中,在最顶层的视图中添加以下行

tools:context=".ActivityA"

答案 1 :(得分:1)

您可以尝试几件事

  1. android:launchMode="singleTop"
  2. 设置MyActivityAsDialog
  3. 确保REQUEST_DIALOG_ID值大于0

答案 2 :(得分:1)

您将ur set结果放在方法

cancel(View view)

你称之为这种方法的地方。检查此方法是否正确调用。