Waclock
Waclock

Reputation: 1726

Updating edittext from fragment

I currently have the following situation:

1) The "main view" which contains the EditText I'm trying to update. (Let's call it mainView)

2) A fragment that is opened whenever I click in a button that is contained in the "main view", the fragment receives mainView as parameter.

3) An OnClickListener which is set to a button that is contained by the fragment. This listener receives the fragment as parameter.

Basically what I need to do is, each time I click on the button that triggers the listener, I need to update the editText, however it doesn't seem to be working. I believe it has something to do with "notifying" the view, but I haven't been able to get it working no matter what I try. After I update the text I close the fragment and

Basically the code is the following:

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();
}

Please note that I have simplified the problem a little bit and changed the name of the fragment/views in order for you guys to understand better. The text "hello world" is actually dynamic, and depends no another parameter that is received by the OnClickListener.

After I click the fragment does get replaced, so I know the onClickListener is working correctly, however I believe there's something wrong with the way the data change is being notified.

I've already looked at many SO questions, however none of them have helped me to achieve what I need.

Any help is appreciated, thanks.

Upvotes: 0

Views: 599

Answers (3)

Waclock
Waclock

Reputation: 1726

I realized the problem was that each time I replaced the fargment via the fragmentManager, the method setActivityView was being called again, which replaced the EditText content.

In order to avoid this, I manually removed the fragment (instead of replacing it), doing the following:

FragmentManager manager = this.selectTemplateFragment.getActivity().getFragmentManager();
manager.beginTransaction().remove(this.selectTemplateFragment).commit();

Upvotes: 1

NeviQ-OR
NeviQ-OR

Reputation: 305

I suggest implementing an interface, say, IUpdateFromFragment with method, say, onUpdate(String message), then let activity implement that interface and inside the fragment just call something like ((IUpdateFromFragment)this.getActivity()).onUpdate(newMessageContent);

Upvotes: 2

eclipse1203
eclipse1203

Reputation: 635

Update the fragment via transaction, then within the fragment1 class OnViewCreated, you can do mainView.editText1.setText("whatever");

The way you're doing this now, I'm surprised isn't throwing an exception since the view isn't inflated yet.

Upvotes: 0

Related Questions