Implementing multiple fragments in a single activity Dynamically Implementing multiple fragments in a single activity Dynamically xml xml

Implementing multiple fragments in a single activity Dynamically


All Fragment-to-Fragment communication is done through the associated Activity. Two Fragments should never communicate directly.

http://developer.android.com/training/basics/fragments/communicating.html

test.java // in your case its MainActivity

public class test extends FragmentActivity implements textEntered {    String value;    boolean check = false;    BottomFragment frg2;    FragmentTransaction transaction;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Top_Fragment frg = new Top_Fragment();        frg2 = new BottomFragment();        FragmentManager manager = getSupportFragmentManager();        transaction = manager.beginTransaction();        transaction.add(R.id.My_Container_1_ID, frg, "Frag_Top_tag");        transaction.add(R.id.My_Container_3_ID, frg2, "Frag_Bottom_tag");        transaction.commit();    }    @Override    public void setValue(String editextvalue) {        value = editextvalue;        if (frg2 != null) {            frg2.setName(value);        } else {            Toast.makeText(getApplicationContext(), "fragment 2  is null", 1000).show();        }    }}    

Top_Fragment.java

public class Top_Fragment extends Fragment {    textEntered mCallback;    Button b;    EditText ed;    public interface textEntered {        public void setValue(String editextvalue);    }    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,        Bundle savedInstanceState) {        // TODO Auto-generated method stub        View view = inflater.inflate(R.layout.my_fragment1, container, false);        ed = (EditText) view.findViewById(R.id.editText1);        return view;    }    @Override    public void onActivityCreated(Bundle savedInstanceState) {        // TODO Auto-generated method stub        super.onActivityCreated(savedInstanceState);        b = (Button) getView().findViewById(R.id.button1);        b.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                // TODO Auto-generated method stub                String s = ed.getText().toString();                mCallback.setValue(s);            }        });    }    @Override    public void onAttach(Activity activity) {        super.onAttach(activity);        // This makes sure that the container activity has implemented        // the callback interface. If not, it throws an exception        try {            mCallback = (textEntered) activity;        } catch (ClassCastException e) {            throw new ClassCastException(activity.toString() +                " must implement textEntered");        }    }}

my_fragment1.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent" >    <EditText        android:id="@+id/editText1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerHorizontal="true"        android:layout_centerVertical="true"        android:ems="10"        android:textColor="#000000"        android:singleLine="true" >        <requestFocus />    </EditText>    <Button        android:id="@+id/button1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@+id/editText1"        android:layout_centerHorizontal="true"        android:layout_marginTop="20dp"        android:text="Button" /></RelativeLayout>

Change to

 display_text=(TextView) view.findViewById(R.id.textView1); // id is textView 1 not editText1

in BottomFragment

snap

enter image description here


Communication between Fragments

There can be many scenarios where communication between fragment is required. You need to pass data between fragments on button click event. You may also use Android toolbar to switch between fragments. When you add buttons to your toolbar, you need to dynamically change screen using fragment.

Create an interface which will help us to communicate

Communicate.java

package com.example.amaanmemon.testfragment;interface Communicate { public void sendData();}

TopFragment.java

package com.example.amaanmemon.testfragment;import android.support.v4.app.Fragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.EditText;public class TopFragment extends Fragment {EditText  firstName;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,                         Bundle savedInstanceState) {    // TODO Auto-generated method stub    View view=inflater.inflate(R.layout.my_fragment1, container, false);    return view;}public void onActivityCreated(Bundle savedInstanceState) {    // TODO Auto-generated method stub    super.onActivityCreated(savedInstanceState);    firstName = (EditText) getActivity().findViewById(R.id.editText1);}public String getData(){    return firstName.getText().toString();}}

MiddleFragment.java

package com.example.amaanmemon.testfragment;import android.os.Bundle;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.Button;public class MiddleFragment extends Fragment implements OnClickListener{View view;Button btn;Communicate cm;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,                         Bundle savedInstanceState) {    // TODO Auto-generated method stub    view=inflater.inflate(R.layout.my_fragment2, container, false);    return  view;}@Overridepublic void onActivityCreated(Bundle savedInstanceState) {    // TODO Auto-generated method stub    super.onActivityCreated(savedInstanceState);    cm = (Communicate) getActivity();    btn = (Button) getActivity().findViewById(R.id.button1);    btn.setOnClickListener(this);}@Overridepublic void onClick(View arg0) {    // TODO Auto-generated method stub    cm.sendData();}}

BottomFragment.java

package com.example.amaanmemon.testfragment;import android.os.Bundle;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.Button;import android.widget.TextView;public class BottomFragment extends Fragment{int count;View view;TextView display_text;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,                         Bundle savedInstanceState) {    // TODO Auto-generated method stub    view=inflater.inflate(R.layout.my_fragment3, container,false);    return view;}@Overridepublic void onActivityCreated(Bundle savedInstanceState) {    // TODO Auto-generated method stub    super.onActivityCreated(savedInstanceState);    display_text = (TextView)getActivity().findViewById(R.id.textView1);}public void incrementData(String displayText){    display_text.setText(displayText);}}

MainActivity.java

package com.example.amaanmemon.testfragment;import android.support.v4.app.FragmentActivity;import android.os.Bundle;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentTransaction;public class MainActivity extends FragmentActivity implements Communicate{TopFragment frg;MiddleFragment frg1;BottomFragment frg2;FragmentTransaction transaction;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    frg = new TopFragment();    frg1 = new MiddleFragment();    frg2 = new BottomFragment();    FragmentManager manager=getSupportFragmentManager();    transaction=manager.beginTransaction();    transaction.add(R.id.My_Container_1_ID, frg, "Frag_Top_tag");    transaction.add(R.id.My_Container_2_ID, frg1, "Frag_Middle_tag");    transaction.add(R.id.My_Container_3_ID, frg2, "Frag_Bottom_tag");    transaction.commit();}@Overridepublic void sendData() {    String temp = frg.getData();    frg2.incrementData(temp);}}

You can copy xml files from question.you can watch the output below.

output


You can use the Activity for that.

in the onClick of the bottom fragment you can do something like

((MainActivity) getActivity()).doIt();

And make a method doIt in your MainActivity maybe something like this

public void doIt(){    frg2.setName(frg.getText())}

and in the top fragment make a method getText that returns the text of the EditText