单击操作栏"向上按钮"时未调用onActivityResult()

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.尽管如此,我仍然需要在托管活动中使用它.我也在这里尝试了最佳答案,但仍然难倒......

(作为旁注,布尔值用于检测用户按下时应显示哪个片段).

Car*_*rau 5

我有一个类似的问题,解决方案实际上很容易实现(虽然很难找到...)

在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 次

最近记录:

11 年,2 月 前