即使我尝试启动ActivityForResult,在FragmentPagerAdapter中保存InstanceSta



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

PrimaryActivity(…ListView onClick-通过发送<PrimaryUri>意图…)>
MasterActivity(TabLayout、ViewPager、,FragmentPageAdapter)>
FragmentA/FragmentB(…ListView on Click-发送<PrimaryUri>+<DetailUri>通过意向…)>详细活动。

现在,当我按下DetailActivity中的BACK按钮时,MasterActivity将被销毁,并使用片段A和B的新实例重新创建,Intent数据(<PrimaryUri>)将丢失

我试着坚持<PrimaryUri>通过这种方式在活动之间:

  • 覆盖MasterActivity中的onSaveInstanceState/onCreate(Bundle),但Bundle始终为null即使onSaveInstance保存数据
  • 使用getActivity()启动DetailActivity。startActivityForResult(…,在DetailActivity中设置resultIntent并调用setResult(OK,ResultCode>0)并读取MasterActivity.onActivityResult中的值…但是从未调用onActivityResult
  • 使用startActivityForResult启动DetailActivity。。。dtto。。。FragmentB.onActivityResult…但是onActivityResult从来都不是已调用
  • 已检查清单中的错误属性

现在,我真的很感谢帮助解决这个问题:如何坚持<PrimaryUri>在我的申请中?我更喜欢使用意图来解决这种奇怪的行为。一些论坛讨论了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);  
}

在碎片B中我有:

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>中的BACK按钮
  2. MasterActivity.尝试被呼叫(为什么会这样?)=
  3. 对FragmentB的WeakReference为空,并且创建了新实例=
  4. 永远不会调用MasterActivity或FragmentB的onActivityResult

我认为原因是在等待onActivityResult时出现了onDestroy。但是,为什么要调用它,为什么MasterActivity没有完全重新创建以捕获ActivityResult回调?

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

您在片段中调用startActivityForResult是吗?

对于要调用的片段中的onActivityResult,您首先必须在活动中处理onActivityResult。打电话给上级。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
}

然后,您应该能够在片段的onActivityResult中处理它。

相关内容

  • 没有找到相关文章

最新更新