调用 startActivityForResult 永远不会传递给 onActivityResult
Calling startActivityForResult never pass to onActivityResult
我正在从子 activity 调用 startActivityForResult 到 MainActivity 但从未传递给 onActivityResult
secondActivty 这是调用
private void bringMainActivityToTop() {
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
Bundle bun= new Bundle();
bun.putParcelable("value",new ListData("HelloDummy",longi,lati,"data"));
intent.putExtra("bundle",bun);
setResult(RESULT_OK, intent);
startActivityForResult(intent, 111);
}
我想在 MainActivity 上看到这里的调用我不关心代码我只想看到调用。
@Override
protected void onActivityResult(int requestCode, int responseCode, Intent data) {
super.onActivityResult(requestCode, responseCode, data);
System.out.println("HelloWorld");
Log.i(TAG,"HelloWorld");
}
和清单
<activity
android:name="com.test.mppqvat.activity.MainActivity"
android:label="@string/main_act_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
您呼叫的 Activity 必须呼叫 setResult(Activity.RESULT_OK)
或 setResult(Activity.RESULT_OK, data)
MainActivity.java(在 onCreate 中)
button1=(Button)findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
startActivityForResult(intent, 2);// Activity is started with requestCode 2
}
});
(onCreate 之外)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
// check if the request code is same as what is passed here it is 2
if(requestCode==2)
{
String message=data.getStringExtra("MESSAGE");
//use resulted message
}
}
SecondActivity.java(在 onCreate 中)
button1=(Button)findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
String message=editText1.getText().toString();
Intent intent=new Intent();
intent.putExtra("MESSAGE",message);
setResult(2,intent);
finish();//finishing activity
}
});
onActivityResult()
属于您的第二个 activity(如果不是,则必须),而不是 MainActivity
。 onActivityResult()
方法不会在 MainActivity
中触发,因为 MainActivity
是为结果启动的。你意识到了吗?
此外,如果开始获取结果,您的 MainActivity
必须使用 setResult()
方法设置结果,并且必须使用 finish()
方法完成,这样结果将从您的 MainActivity
给你的来电者 SeconActivity
activity 并且它的 onActivityResult()
将被解雇。
我正在从子 activity 调用 startActivityForResult 到 MainActivity 但从未传递给 onActivityResult
secondActivty 这是调用
private void bringMainActivityToTop() {
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
Bundle bun= new Bundle();
bun.putParcelable("value",new ListData("HelloDummy",longi,lati,"data"));
intent.putExtra("bundle",bun);
setResult(RESULT_OK, intent);
startActivityForResult(intent, 111);
}
我想在 MainActivity 上看到这里的调用我不关心代码我只想看到调用。
@Override
protected void onActivityResult(int requestCode, int responseCode, Intent data) {
super.onActivityResult(requestCode, responseCode, data);
System.out.println("HelloWorld");
Log.i(TAG,"HelloWorld");
}
和清单
<activity
android:name="com.test.mppqvat.activity.MainActivity"
android:label="@string/main_act_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
您呼叫的 Activity 必须呼叫 setResult(Activity.RESULT_OK)
或 setResult(Activity.RESULT_OK, data)
MainActivity.java(在 onCreate 中)
button1=(Button)findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
startActivityForResult(intent, 2);// Activity is started with requestCode 2
}
});
(onCreate 之外)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
// check if the request code is same as what is passed here it is 2
if(requestCode==2)
{
String message=data.getStringExtra("MESSAGE");
//use resulted message
}
}
SecondActivity.java(在 onCreate 中)
button1=(Button)findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
String message=editText1.getText().toString();
Intent intent=new Intent();
intent.putExtra("MESSAGE",message);
setResult(2,intent);
finish();//finishing activity
}
});
onActivityResult()
属于您的第二个 activity(如果不是,则必须),而不是 MainActivity
。 onActivityResult()
方法不会在 MainActivity
中触发,因为 MainActivity
是为结果启动的。你意识到了吗?
此外,如果开始获取结果,您的 MainActivity
必须使用 setResult()
方法设置结果,并且必须使用 finish()
方法完成,这样结果将从您的 MainActivity
给你的来电者 SeconActivity
activity 并且它的 onActivityResult()
将被解雇。