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

标签 android android-intent fragmentpageradapter startactivityforresult

我的 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 数据再次重新创建( )丢失了

我尝试通过这种方式在 Activity 之间持久保存:

  • 在 MasterActivity 中重写 onSaveInstanceState/onCreate(Bundle),但 Bundle 始终为 null 即使 onSaveInstance 保存了数据
  • 使用 getActivity().startActivityForResult(... 启动 DetailActivity,在 DetailActivity 中设置 resultIntent 并调用 setResult(OK, ResultCode > 0) 并读取 MasterActivity.onActivityResult 中的值... 但是 onActivityResult 从未被调用
  • 使用 startActivityForResult 启动 DetailActivity,...dtto...FragmentB.onActivityResult... 但是 onActivityResult 永远不会 称为
  • 检查 list 是否有错误的属性

现在我非常感谢您对以下问题的帮助:如何在我的应用程序中保留?我更喜欢使用 Intent 来解决这种奇怪的行为。一些论坛讨论了 FragmentPageAdapter 等中的错误...如果这是快速解决方案,也许我会重构它以使用 SharedPreferences...

编辑:一些附加信息:

详细 Activity :

@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 回调?

最佳答案

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

关于android - 即使我在 FragmentPagerAdapter 中尝试 startActivityForResult、saveInstanceState,后退按钮上的 Intent 也会丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37061838/

相关文章:

android - Action Bar 的 Home 按钮的 onClick 监听器

android - 当我使用 'poweroff' 重新启动时,如何在 HTC 中获取 Boot_Complete Intent ?

java - 使用 Intent 开始上一个 Activity ,而不创建新 Activity

android - 如何获取当前fragment的ID?

android - FragmentPagerAdapter getItem 没有被触发

android - 程序错误在 Android 上以编程方式安装应用程序

android - 如何在 ContentProviderOperation 中添加联系人图片?

android - Android 网络库 : OkHTTP, Retrofit 和 Volley 的比较

android - 从 SherlockActionBar fragment 选项卡动态添加菜单项

android - 使用 FragmentPagerAdapter 时如何获取现有 fragment