即使我在 FragmentPagerAdapter 中尝试 startActivityForResult、saveInstanceState,BACK 按钮上的 Intent 也会丢失

Intent lost on BACK button even if I try startActivityForResult, saveInstanceState in FragmentPagerAdapter

我的 android 应用程序中有这个导航模式:

PrimaryActivity (... ListView onClick - sending <PrimaryUri> via intent...) >
MasterActivity (TabLayout, ViewPager, FragmentPageAdapter) >
FragmentA / FragmentB (...ListView onClick - sending <PrimaryUri> + <DetailUri> via intent...) > DetailActivity.

现在,当我在 DetailActivity 中按下返回按钮时,MasterActivity 被销毁并使用 Fragment A 和 B 的新实例以及 Intent 数据() 丢失.

我尝试通过这种方式在活动之间保持

现在我真的很感谢问题的帮助:How to persist in my application?我更喜欢使用意图来解决这种奇怪的行为。一些论坛讨论了 FragmentPageAdapter 等中的错误...如果它是快速解决方案,也许我会重构它以使用 SharedPreferences...

编辑:一些附加信息:

在详细活动中:

@Override  
public void finish() {  
    Intent resultIntent = new Intent();  
    resultIntent.setData((Uri) getIntent().getParcelableExtra(FragmentB.MY_URI));  
    setResult(Activity.RESULT_OK, resultIntent);  
    super.finish();  
}  

在 MasterActivity 中我有:

@Override  public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);  
}

在 FragmentB 中我有:

public void onItemSelected(Uri contentUri) {      
    Intent intent = new Intent(getActivity(), DetailActivity.class);     
    intent.putExtra(PRIMARY_URI, mUri);...     
    startActivityForResult(intent, FragmentB.BACKTAG);  
} 

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {   
    super.onActivityResult(requestCode, resultCode, data);    
    switch (requestCode) {  
        case (FragmentB.BACKTAG): {  
            if (resultCode == Activity.RESULT_OK) {  
                mUri = data.get...  
            }  
        }  
        break;  
    }    
}  

奇怪的行为看起来像:

  1. 我在 DetailActivity 中按下返回按钮 >
  2. MasterActivity.onDestroy 接到电话(为什么?).. =
  3. 对 FragmentB 的 WeakReference 为 null 并创建了新实例 =
  4. 永远不会调用 MasterActivity 或 FragmentB 的 onActivityResult。

我认为原因是在等待onActivityResult时出现了onDestroy。但是为什么调用它以及为什么没有完全重新创建 MasterActivity 来捕获 onActivityResult 回调?

您在片段中调用了 startActivityForResult 是吗?

要调用片段中的 onActivityResult,您首先必须处理 activity 中的 onActivityResult。给超打电话。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
}

然后您应该能够在片段的 onActivityResult 中处理它。

这很头疼,但 here 经过 2 天的徒劳尝试,我找到了解决方案。这与 FragmentPagerAdapter 无关。我是幸运的女人!