Android onActivityResult未被调用

时间:2016-07-07 21:31:19

标签: android onactivityresult

这个问题已在多个线程上提出,但他们的解决方案对我不起作用。

这是我的清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.example.intent"
      android:versionCode="1"
      android:versionName="1.0">
<uses-sdk android:minSdkVersion="8"
          android:targetSdkVersion="23"/>
<application android:icon="@drawable/icon"
             android:label="@string/app_name"
             android:allowBackup="false">
    <activity android:name=".Start">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
    <activity android:name=".Second"/>
</application>
</manifest>

这是我的启动课

package com.example.intent;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

public class Start extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Toast.makeText(this, "First Intent", Toast.LENGTH_LONG).show();
    Intent intent = new Intent(this, Second.class);
    startActivityForResult(intent, RESULT_OK);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Toast.makeText(this, "After Intent", Toast.LENGTH_LONG).show();
}
}

这是我的第二类

package com.example.intent;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

public class Second extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Toast.makeText(this, "Second Intent", Toast.LENGTH_LONG).show();
}
}

现在根据代码,当我按下Second Activity类上的后退按钮时,应该调用Start类中的onActivityResult函数,但是因为我无法看到任何Toast声明 After Intent

请纠正我并为此提供解决方案。感谢。

2 个答案:

答案 0 :(得分:2)

替换startActivityForResult中的RESULT_OK(intent,RESULT_OK);一些自定义常数,一个正数。 RESULT_OK是-1

答案 1 :(得分:0)

未调用方法onActivityResult,因为您应该在第二类中设置返回代码。

Official Documentation说:

  

当一个活动退出时,它可以调用setResult(int)来返回数据   给它的父母。 必须始终提供结果代码,可以是   标准结果RESULT_CANCELED,RESULT_OK或任何自定义值   从RESULT_FIRST_USER开始。

要设置结果代码,请在关闭活动之前使用方法setResult

将以下行添加到第二个类:

setResult(RESULT_OK)

例如,您可以覆盖onBackPressed方法并将setResult放在那里,如下所示:

@Override
public void onBackPressed()
{
     setResult(RESULT_OK)
     super.onBackPressed();  
}