我的Android应用程序中有以下导航架构:
PrimaryActivity(... ListView onClick-通过发送
意向...)>
MasterActivity(TabLayout,ViewPager,
FragmentPageAdapter)>
FragmentA / FragmentB(... ListView onClick-
通过意图发送 + )> DetailActivity。
现在,当我在DetailActivity中按BACK按钮时,MasterActivity被破坏,并使用Fragment A和B的新实例重新创建,并且丢失了Intent数据()。
我尝试通过以下方式在活动之间保留:
在MasterActivity中重写onSaveInstanceState / onCreate(Bundle),但即使onSaveInstance保存数据,捆绑包也始终为null
使用getActivity()。startActivityForResult(...)启动DetailActivity,在DetailActivity中设置resultIntent并调用setResult(OK,ResultCode> 0)
并读取MasterActivity.onActivityResult中的值...但是
从未调用过onActivityResult
使用startActivityForResult,... dtto ... FragmentB.onActivityResult ...启动DetailActivity,但是onActivityResult永远不会
叫
检查清单是否有错误的属性
现在,我非常感谢您提供的以下问题帮助:如何在应用程序中保留?我更喜欢使用意图并解决这种奇怪的行为。一些论坛讨论了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;
}
}
奇怪的行为如下所示:
我在DetailActivity>中按BACK按钮
MasterActivity.onDestroy被调用(为什么?).. =
对FragmentB的WeakReference为空,并创建了新实例=
永远不会调用MasterActivity或FragmentB的onActivityResult。
我认为原因是在等待onActivityResult时出现了onDestroy。但是为什么要调用它,为什么不能完全重新创建MasterActivity以捕获onActivityResult回调?
最佳答案
这很头疼,但是here经过2天徒劳的尝试,我找到了解决方案。这与FragmentPageAdapter没有关系。我是幸运的女人!