为什么getSupportFragmentManager()。findFragmentByTag(tag)总是显示空值?

为什么getFragmentManager().findFragmentByTag(tag)总是显示空值。我正在使用以下代码调用Fragment:

FragmentManager fragmentManager =getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.frame_step,fragment,tag).hide(SourceFragment.this).addToBackStack((SourceFragment.class.getName()));
fragmentTransaction.commit();

抱歉,它是getFragmentManager()而不是getSupportFragmentManager()

如果我有片段A和片段B。我使用以下代码从A调用片段B

FragmentManager fragmentManager =getFragmentManager();
    FragmentTransaction fragmentTransaction =
            fragmentManager.beginTransaction();


    fragmentTransaction.add(R.id.frame_step,TAG).hide(SourceFragment.this).addToBackStack((SourceFragment.class.getName()));
    fragmentTransaction.commit();

现在在片段B中,我有EditText,并且在其中输入了“ Hello”,如果我按片段B中的“后退”按钮,则根据getSupportFragmentManager()。popBackStack();它将恢复片段A

现在,如果我再次从Fragment A调用Fragment B,我希望不会再次创建FragmentB,但仍然可以在EditText中看到“ Hello”。

注意-我不想为此使用变量或共享首选项,因为我有多个具有多个视图的片段,例如大表格。有没有什么可以从恢复状态中调用片段而不是再次调用它,或者我是否可以检查此片段是否已经创建。提前致谢 ft.show(fragment)也不起作用。有什么需要使它起作用的吗?

amzonpb365 回答:为什么getSupportFragmentManager()。findFragmentByTag(tag)总是显示空值?

由于问题相当模糊,我最好的猜测是:

getSupportFragmentManager().findFragmentByTag(tag);
,

当您从Backstack中删除片段时,Android会擦除片段及其数据。

如果要保留片段的状态,只需将其保留在堆栈中即可。 您该怎么做:

- Create a fake stack for app flow.
- Remove or add fragment in fake stack for flow,remove/add fragment from 
official stack if you don't want to keep it's state.
- Retrieve fragment by using it's tag.

此解决方案并不简单,因为使用变量将数据保存在活动中或使用共享首选项。换句话说,您还可以为每个屏幕创建一个模型,然后将数据保存到该模型中。每次检索您想要的。这是您的选择。

Ps:要获得更多优势,您可以寻找onSaveInstanceState

希望这对您有帮助!

本文链接:https://www.f2er.com/3097568.html

大家都在问