Communication between Fragments in ViewPager

Solution 1:

  1. You could use Intents (register broadcast receiver in fragment B and send broadcasts from fragment A.
  2. Use EventBus: https://github.com/greenrobot/EventBus. It's my favorite approach. Very convinient to use, easy communications between any components (Activity & Services, for example).

Steps to do:

First, create some class to represent event when your text changes:

public class TextChangedEvent {
  public String newText;
  public TextChangedEvent(String newText) {
      this.newText = newText;
  }
}

Then, in fragment A:

//when text changes
EventBus bus = EventBus.getDefault();
bus.post(new TextChangedEvent(newText));

in fragment B:

EventBus bus = EventBus.getDefault();

//Register to EventBus
@Override
public void onCreate(SavedInstanceState savedState) {
 bus.register(this);
}

//catch Event from fragment A
public void onEvent(TextChangedEvent event) {
 yourTextView.setText(event.newText);
}

Solution 2:

Fragments have access to there parent Activity.
Therefore the simplest approach is to register a callback in the parent Activity.

Update: Submit cache added to MainActivity.

    public class MainActivity extends FragmentActivity {

        private OnButtonClicked mOnButtonClicked;
        private String mSubmitCache;

        public interface OnButtonClicked {
            void submit(final String s);
        }

        public void setOnButtonClicked(final OnButtonClicked c) {
            mOnButtonClicked = c;
            // deliver cached string, if any
            if (TextUtils.isEmpty(mSubmitCache) == false) {
                c.submit(mSubmitCache);
            }
        }

        public void buttonClicked(final String s)  {
            if (mOnButtonClicked == null) {
                // if FragmentB doesn't exist jet, cache value
                mSubmitCache = s;
                return;
            }
            mOnButtonClicked.submit(s);
        }
    }

    public class FragmentA extends Fragment implements OnClickListener {

        private MainActivity mMain;
        private Button mButton;

        @Override public onAttach(Activity a) {
            mMain = (MainActivity) a;
        }

        @Override public void onClick(View v) {
            mMain.buttonClicked("send this to FragmentB.");
        }
    }

    public class FragmentB extends Fragment implements MainActivity.OnButtonClicked {

        private MainActivity mMain;
        private TextView mTextView;

        // Called when the fragment's activity has been created
        // and this fragment's view hierarchy instantiated
        @Override public void onActivityCreated(Bundle savedState) {
            mMain = (MainActivity) getActivity();
            mMain.setOnButtonClicked(this);
        }

        @Override void submit(final String s) {
            mTextView.setText(s);
        }
    }