Jan*_*n96 2 android android-intent android-activity onactivityresult
我有一个处理问题序列的类。它不会扩展 Activity。类中有这样的方法:
public class QuizMaster {
public void startQuiz(Activity activity, Model model) {
//switch - case statement using model
Intent intent = new Intent(activity, QuestionTextActivity.class)
activity.startActivityForResult(intent, requestCode);
//other case statements with other intents
}
}
Run Code Online (Sandbox Code Playgroud)
当我从工作活动中调用此方法时
mQuizMaster.startQuiz(this, mModel);
Run Code Online (Sandbox Code Playgroud)
我完成()子活动:
Intent returnIntent = new Intent();
returnIntent.putExtra(ARG_SELECTED_CHECKBOX, checkedBox);
setResult(RESULT_CODE, returnIntent);
finish();
Run Code Online (Sandbox Code Playgroud)
它不执行父活动的
@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
Log.d(LOG_TAG, "OnActivityResult called in SignDetailsActivity. Resultcode is: ");
}
Run Code Online (Sandbox Code Playgroud)
但是当我执行
Intent intent = new Intent(activity, QuestionTextActivity.class)
activity.startActivityForResult(intent, requestCode);
Run Code Online (Sandbox Code Playgroud)
在实际的父活动文件中,它确实执行 onActivityResult 方法。
如果与非活动类一起发送,为什么子活动不运行父活动中的 onActivityResult?我该如何解决?
我还没有发现任何人在像这样的非活动类中执行 new Intent() 时遇到同样的问题。如果有人,我没有使用正确的搜索关键字,其他一些人可能会像我一样输入并进入此页面。
您需要在调用finish()之前调用setResult(int)。这是来自活动文档:
当 Activity 退出时,它可以调用 setResult(int) 将数据返回到其父级。它必须始终提供结果代码,该代码可以是标准结果 RESULT_CANCELED、RESULT_OK 或从 RESULT_FIRST_USER 开始的任何自定义值。此外,它还可以选择返回包含它想要的任何附加数据的 Intent。所有这些信息及其最初提供的整数标识符都会显示在父级的 Activity.onActivityResult() 上。
这是我的实现,有效:
MainActivity.java(父活动)
public class MainActivity extends AppCompatActivity {
private Sample sample;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button) findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sample = new Sample();
sample.startActivity(MainActivity.this);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d("TEST", "DONE");
}
}
Run Code Online (Sandbox Code Playgroud)
LaunchActivity.java(子活动)
public class LaunchActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_launch);
Button btn = (Button) findViewById(R.id.button2);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setIntent(new Intent());
finish();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
Sample.java(类启动活动)
public class Sample {
public Sample () {}
public void startActivity (Activity a) {
Intent it = new Intent(a, LaunchActivity.class);
a.startActivityForResult(it, 0);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2569 次 |
| 最近记录: |