我的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没有关系。我是幸运的女人!

10-07 22:17