我目前有以下情况:
1)"主视图"其中包含我试图更新的EditText。 (让我们称之为mainView
)
2)每当我点击"主视图"中包含的按钮时打开的片段 fragment接收mainView作为参数。
3)OnClickListener
设置为片段包含的按钮。该侦听器接收片段作为参数。
基本上我需要做的是,每次单击触发监听器的按钮时,我都需要更新editText,但它似乎并没有起作用。我相信它与"通知"有关。观点,但无论我尝试什么,我都无法让它发挥作用。更新文本后,我关闭片段和
基本上代码如下:
public void onClick(View v){
String newMessageContent = "hello world";
fragment1.mainView.editText1.setText(newMessageContent);
FragmentManager manager = this.fragment1.getActivity().getFragmentManager();
manager.beginTransaction().replace(R.id.container,this.fragment1.mainView.getPlaceHolderFragment()).commit();
}
请注意我已经简化了一点问题,并更改了片段/视图的名称,以便让大家更好地理解。文字"你好世界"实际上是动态的,并且不依赖于OnClickListener
收到的其他参数。
点击后片段确实被替换,所以我知道onClickListener
工作正常,但我相信数据更改的通知方式有问题。
我已经看过很多SO问题,但是没有一个能帮我实现我的需要。
感谢任何帮助,谢谢。
答案 0 :(得分:2)
我建议使用方法实现一个接口,例如IUpdateFromFragment,比如onUpdate(String message)
,然后让activity实现该接口,并在片段内部调用类似((IUpdateFromFragment)this.getActivity()).onUpdate(newMessageContent);
答案 1 :(得分:1)
我意识到问题是每次我通过fragmentManager替换fargment时,方法setActivityView再次被调用,它取代了EditText内容。
为了避免这种情况,我手动删除了片段(而不是替换它),执行以下操作:
FragmentManager manager = this.selectTemplateFragment.getActivity().getFragmentManager();
manager.beginTransaction().remove(this.selectTemplateFragment).commit();
答案 2 :(得分:0)
通过事务更新片段,然后在fragment1类OnViewCreated中,你可以做mainView.editText1.setText(“whatever”);
你现在这样做的方式,我很惊讶不会抛出异常,因为视图还没有膨胀。