8

我已经使用startActivityForResult从父活动开始了一个子活动。在子活动中执行所需功能后,我正在使用setResult设置结果。但是我没有从子活动中获得父活动的结果。

这是我的代码。

这是我如何从父活动中调用我的子活动。

 Intent i = new Intent(MainActivity.this, Child.class);
    i.putExtra("ID", intID);
    i.putExtra("aID", aID);
    i.putExtra("myMsg", myMsg);
    startActivityForResult(i, 1);

这就是我设置孩子活动结果的方式。

 @Override
    public void onBackPressed() {
        super.onBackPressed();
     Intent resultInt = new Intent();
     resultInt.putExtra("Result", "Done");
     setResult(Activity.RESULT_OK, resultInt);
     finish();
}

这是我的onActivityResult

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

    if (requestCode == 1) {

        if (resultCode == Activity.RESULT_OK) {
            if(data!=null) {
                Toast.makeText(MainActivity.this, "Data received", Toast.LENGTH_SHORT).show();
            }
        }
    }

}

在这里,当我检查resultCode==Activity.RESULT_OK时给出的是错误的。我还检查了在这个 if 条件之外传递的意图及其返回 null。

 <activity
        android:name=".MainActivity"
        android:label="Main"
        android:parentActivityName=".MainPage"
        android:theme="@style/AppTheme.NoActionBar">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="org.mydomain.mydomain.MainPage" />
    </activity>
    <activity
        android:name=".Child"
        android:label="Child"
        android:parentActivityName=".MainActivity"
        android:theme="@style/AppTheme1">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="org.mydomain.mydomain.MainActivity" />
    </activity>

谁能帮我解决这个问题。

4

4 回答 4

15

修改你的onBackPressed()方法

@Override
public void onBackPressed() {

 Intent resultInt = new Intent();
 resultInt.putExtra("Result", "Done");
 setResult(Activity.RESULT_OK, resultInt);
 super.onBackPressed();
} 

原因:Backpress 操作是在将结果发送到父活动之前执行了他的任务......

于 2016-01-28T06:37:41.837 回答
0

尝试不同的 Intent 构造函数。像这样:

    Intent resultIntent = new Intent(RESULT_NAME, Uri.parse("data"));
    setResult(RESULT_OK, resultIntent);
    finish();

原因是因为它可能正在寻找Uri类型中的数据。看看这个

于 2016-01-27T18:12:45.167 回答
0

我认为您错过了一些编码部分。

  1. 您的代码排列看起来不正确。

  2. 您必须创建一个变量来接收从childActivity传递的数据。

      @Override
            protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == Activity.RESULT_OK) {
              if (requestCode == 1) {
                 String ReceiveData = data.getStringExtra("Result"); // you have to receiveData
                    if(ReceiveData !=null) {
                        Toast.makeText(MainActivity.this, "Data received", Toast.LENGTH_SHORT).show();
                    }
                }
            }
    
        }
    
于 2016-01-27T18:21:58.283 回答
0

在您的父 Activity 中编写 finish()。

于 2016-01-28T06:42:43.753 回答