我的Android应用程序中有这个导航架构:
PrimaryActivity(... ListView onClick - 通过意图发送<PrimaryUri> ...)> MasterActivity(TabLayout,ViewPager,FragmentPageAdapter)> FragmentA / FragmentB(... ListView onClick - 通过意图发送<PrimaryUri> <DetailUri> . )> DetailActivity .
现在,当我在 DetailActivity 中按下BACK按钮时,MasterActivity将被破坏并再次使用片段A和B and Intent data (<PrimaryUri>) is lost 的新实例重新创建 .
我尝试通过这种方式在Activies之间持久保存<PrimaryUri>:
-
覆盖MasterActivity中的onSaveInstanceState / onCreate(Bundle), but Bundle was always null 甚至onSaveInstance保存数据
-
使用getActivity()启动DetailActivity.startActivityForResult(...,在DetailActivity中设置resultIntent并调用setResult(OK,ResultCode> 0)并在MasterActivity.onActivityResult中读取值... But onActivityResult was never called
-
使用startActivityForResult启动DetailActivity,... dtto ... FragmentB.onActivityResult ... But onActivityResult is never called
-
检查了错误属性的清单
现在我非常感谢有关问题的帮助:如何在我的应用程序中持久保存<PrimaryUri>?我更喜欢使用意图并解决这种奇怪的行为 . 一些论坛讨论了FragmentPageAdapter等中的错误......如果它是快速解决方案的话,我可能会重构它以使用SharedPreferences ...
EDIT: 一些其他信息:
在DetailActivity中:
@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为null并且创建了新实例=
永远不会调用MasterActivity或FragmentB的 -
onActivityResult .
我认为原因是onDestroy在等待onActivityResult时出现 . 但为什么要调用它以及为什么没有完全重新创建MasterActivity以捕获onActivityResult回调?
2 回答
你在片段中调用startActivityForResult是吗?
对于要调用的片段中的onActivityResult,首先必须处理活动中的onActivityResult . 打电话给超级 .
然后,您应该能够在片段的onActivityResult中处理它 .
这很令人头疼,但是我在无效尝试2天后找到了解决办法 . 这与FragmentPageAdapter无关 . 我是幸运的女人!