onActivityResult未被触发

时间:2017-01-04 23:15:56

标签: android android-intent startactivityforresult

我试图将数据从一个活动传递到另一个活动,但是没有触发onActivityResult。通过我的启动活动(称为MainActivity),我能够查看图像库,然后使用这段代码触发onActivityResult。

  Intent i = new Intent(
                    Intent.ACTION_PICK,
                    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

            startActivityForResult(i, RESULT_LOAD_IMAGE);

从另一个Acitivity我有这段代码

 gridLayout.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent intent =new Intent();
            setResult(RESULT_OK,intent);
            intent.setClass(getApplicationContext(), MainActivity.class);
            intent.putExtra("someData",id);
            finish();

        }
    });

这也会调用MainActivity中的onActivityResult,但下一行代码不会。

   gridLayout.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent intent = new Intent();
            intent.setClass(getApplicationContext(), MainActivity.class);
            intent.putExtra("someData",id);
            startActivityForResult(intent, 2);
        }
    });

我查看了清单文件,一切都设置正确。我已经看到人们建议诸如转动android:noHistory =&#34; false&#34;但是我的清单中没有这些。它非常简单,看起来像这样。

  <application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:largeHeap="true">

    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:theme="@style/CustomTheme"
        >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".ImageRollActivity"
        android:theme="@style/GridTheme"
        android:label=" Image Roll"
        android:parentActivityName=".MainActivity"
        >
    </activity>

如果有人有任何见解,为什么这不会被触发,我将不胜感激!

1 个答案:

答案 0 :(得分:3)

在第二个中,您呼叫startActivityForResult()而不是setResult()(如第一个示例中所示)。

调用startActivityForResult()将启动活动,这意味着它将被重新创建并通过Activity lifecycle

setResult()是您拨打onActivityResult()所需的内容。