gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 01:20:28 26 4
gpt4 key购买 nike

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

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

现在,当我在 DetailActivity 中按下 BACK 按钮时,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

现在我真的很感谢问题的帮助:How to persist in my application?我更喜欢使用 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经过 2 天的徒劳尝试,我找到了解决方案。这与 FragmentPageAdapter 无关。我是幸运的女人!

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com