0

I have an activity "MainActivity" that contains two fragments. Fragment1 has a EditText and a button. When the user presses the button the text inside the EditText will be sent to Fragment2 which only has a TextView. But I can't quite figureout how to send the text from EditText in Fragment1 to TextView in Fragment2. If someone could help? Appreciated. Thanks Fragment1

package org.pctechtips.myfragmentapp;


/**
 * Created by george on 5/16/17.
 */

public class ButtonFragment extends Fragment {

    Button bt;
    EditText editText;
    TextView txtView;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view =  inflater.inflate(R.layout.button_fragment,
                container, false);

        txtView = (TextView) view.findViewById(R.id.textView_fragment1);
        editText = (EditText) view.findViewById(R.id.editText_fragment1);


        bt = (Button) view.findViewById(R.id.button_fragment1);
        bt.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                buttonClicked(v);
            }
        });

        return view;
    }

    public void buttonClicked (View view) {
        .onButtonClick(edittext.getText().toString());
    }

}

MainActivity

package org.pctechtips.myfragmentapp;

public class MainActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /*fragments 1 section*/
        FragmentManager fm1 = getFragmentManager();
        FragmentTransaction ft1 = fm1.beginTransaction();
        ButtonFragment bf = new ButtonFragment();
        ft1.add(R.id.button_fragment1, bf);
        ft1.commit();

        /*Fragment 2 section*/
        FragmentManager fm2 = getFragmentManager();
        FragmentTransaction ft2 = fm2.beginTransaction();
        TextviewFragment tf = new TextviewFragment();
        ft2.add(R.id.textView_fragment2, tf);
        ft2.commit();

        }

}

Fragment2

public class TextviewFragment extends Fragment {

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.text_fragment, container, false);
    }
}
miatech
  • 2,150
  • 8
  • 41
  • 78

2 Answers2

1

You can do it by several ways. For example via Activity like in Official Docs. But, I'm prefer send broadcast messages via LocalBroadcastManager like in this answer of war_Hero:

In Sending Fragment(Fragment B - Your ButtonFragment)

public class FragmentB {

    private void sendMessage() {
      Intent intent = new Intent("custom-event-name");
      intent.putExtra("message", "your message");
      LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
    }
 }

And in the Message to be Received Fragment(FRAGMENT A - Your TextviewFragment)

  public class FragmentA {
    @Override
    public void onCreate(Bundle savedInstanceState) {

      ...

      // Register receiver
      LocalBroadcastManager.getInstance(this).registerReceiver(receiver,
          new IntentFilter("custom-event-name"));
    }

//    This will be called whenever an Intent with an action named "custom-event-name" is broadcasted.
    private BroadcastReceiver receiver = new BroadcastReceiver() {
      @Override
      public void onReceive(Context context, Intent intent) {
        String message = intent.getStringExtra("message");
      }
    };
}

And don't forget to unregister receiver:

protected void onPause() {
  super.onPause();
  LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver);
}
Community
  • 1
  • 1
Andrii Omelchenko
  • 13,183
  • 12
  • 43
  • 79
0

The quick and easy answer is to call getView().findViewById() from the activity (as shown below). The more proper approach is to give your fragments an interface that gets and retrieves the text. Below is the code for the quick and easy method, but when you create a fragment in Android studio it shows you how to do the more proper interface approach.

package org.pctechtips.myfragmentapp;

public class MainActivity extends FragmentActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    /*fragments 1 section*/
    FragmentManager fm1 = getFragmentManager();
    FragmentTransaction ft1 = fm1.beginTransaction();
    ButtonFragment bf = new ButtonFragment();
    ft1.add(R.id.button_fragment1, bf);
    ft1.commit();

    /*Fragment 2 section*/
    FragmentManager fm2 = getFragmentManager();
    FragmentTransaction ft2 = fm2.beginTransaction();
    TextviewFragment tf = new TextviewFragment();
    ft2.add(R.id.textView_fragment2, tf);
    ft2.commit();

    EditText et = (EditText) ft1.getView().findViewById(YOUR_EDITTEXT_ID);
    Button button = (Button) ft1.getView().findViewById(YOUR_BUTTON_ID);
    TextView tv = (TextView) ft2.getView().findViewById(YOUR_TEXTVIEW_ID);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            tv.setText(et.getText();)
        }
    });
}
Aidan Hoolachan
  • 2,285
  • 1
  • 11
  • 14