从片段更新edittext

时间:2014-11-02 02:14:22

标签: android android-fragments android-edittext

我目前有以下情况:

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问题,但是没有一个能帮我实现我的需要。

感谢任何帮助,谢谢。

3 个答案:

答案 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”);

你现在这样做的方式,我很惊讶不会抛出异常,因为视图还没有膨胀。