Dan*_*son 1 android-intent android-fragments onactivityresult
我正在尝试使用startActivityForResult(),我需要从片段开始一个活动,然后在原始活动中处理结果而不是启动它的片段(当按下后面时).任何人都可以告诉我这是可能的还是我的问题是什么?
Activity_A托管Fragment_A,该片段可以启动Activity_B.
Fragment_A:
Intent intent = new Intent(mContext, Activity_B.class);
intent.putExtra(EXTRA_CHOSEN_BUSINESS, mChosenBusiness);
intent.putExtra(EXTRA_CHOSEN_POSITION, position);
getActivity().startActivityForResult(intent, 1);
Run Code Online (Sandbox Code Playgroud)
Activity_B:
@Override
public void onBackPressed() {
Intent intent = new Intent();
intent.putExtra("myBoolean", wasUsingMap);
setResult(RESULT_OK, intent);
finish();
super.onBackPressed();
}
Run Code Online (Sandbox Code Playgroud)
Activity_A:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if(resultCode == RESULT_OK){
mWasUsingMap = data.getBooleanExtra("myBoolean", false);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这种情况下的数据始终为空.
为了进行测试,我尝试不使用getActivity().startActivityForResult(intent, 1);并简单地使用startActivityForResult(intent, 1);并将onActivityResult置于片段中(在此答案之后的活动中调用super onActivityResult )但数据仍为null.尽管如此,我仍然需要在托管活动中使用它.我也在这里尝试了最佳答案,但仍然难倒......
(作为旁注,布尔值用于检测用户按下时应显示哪个片段).
我有一个类似的问题,解决方案实际上很容易实现(虽然很难找到...)
在FragmentA中调用:
startActivityForResult(intent, 1); //not getActivity().startActivityForResult(intent, 1);
Run Code Online (Sandbox Code Playgroud)
并覆盖onActivityResult(片段内)
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if (resultCode == RESULT_OK){
//whatever
}
if (resultCode == RESULT_CANCELED) {
//whatever
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,在ActivityB上执行以下操作:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case android.R.id.home:
Log.e("home button", "pressed");
Intent returnIntent = new Intent();
returnIntent.putExtra("result",mResult);
setResult(RESULT_OK, returnIntent);
finish();
super.onBackPressed();
return true;
case R.id.others:
//whatever
}
return super.onOptionsItemSelected(item);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2003 次 |
| 最近记录: |