首页 文章

即使我在FragmentPagerAdapter中尝试startActivityForResult,saveInstanceState,在BACK按钮上的意图也会丢失

提问于
浏览
2

我的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 回答

  • 0

    你在片段中调用startActivityForResult是吗?

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

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

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

  • 0

    这很令人头疼,但是我在无效尝试2天后找到了解决办法 . 这与FragmentPageAdapter无关 . 我是幸运的女人!

相关问题