更新片段中的值而不重新创建它

时间:2018-10-22 08:56:03

标签: android android-fragments bundle state fragmenttransaction

我有两个片段,例如 FragA FragB 。 FragA具有RecyclerView,其项目单击将用户重新吸引到FragB。在FragB中,用户更新一个值,该值需要在FragA中设置为TextView。但我不想失去FragA的状态

我执行以下操作以切换片段。

Fragment fragment = new FragB();
fragment.setArguments(bundle);
FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.home_frame, fragment, m_userName).addToBackStack(null);
fragmentTransaction.commit();

在FragB中,我使用更新的信息创建一个包:-

FragA mFragA = new FragA ();
Bundle args = new Bundle();
args.putParcelable("UpdatedText", "SomeText");
mFragA .setArguments(args);
getFragmentManager().beginTransaction().remove(this);
getFragmentManager().beginTransaction().add(R.id.container, mFragA).commit();

在上述情况下,FragA的状态保持不变,但是由于未重新创建Fragment,因此未调用任何方法。因此,textview值不会更新。

如何使用FragB的信息更新FragA中TextView的值以及保持FragA的状态?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您必须创建一个包含字符串的类,并在主活动中创建该类的实例,然后在片段B中调用该类,以使用UpdatedText对其进行初始化,例如, class.setTextUpdate(“新文本”),然后在fragmentA中执行class.getTextUpdate

答案 1 :(得分:0)

正确方法: 基本上,您必须正确地正确更新POJO。使用界面将此更改传达回活动,然后从活动将您的更改更新到Fragg A中的recyclerview并进行notifyitemchanged。

备用方式: 使用事件总线。有很多库可供使用,您还具有本机事件总线。

Otto是其中之一。易于集成。