First communicate to the activity that hosts the fragment1 using a interface as a callback. Then you can communicate to fragment2.
You find more info and code snippets @
http://developer.android.com/training/basics/fragments/communicating.html
Example :
FragmentOne ---> MainActivity ---> FramentTwo
MainActivity implements the interface ReturnData
and overrides senData
public class MainActivity extends Activity implements ReturnData{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentOne newFragment = new FragmentOne();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.container, newFragment);
transaction.addToBackStack(null);
transaction.commit();
}
@Override
public void sendData(String result) {
// TODO Auto-generated method stub
FragmentTwo newFragment = new FragmentTwo();
Bundle args = new Bundle();
args.putString("key",result);
newFragment.setArguments(args);
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.container, newFragment);
transaction.addToBackStack(null);
transaction.commit();
}
}
activity_main.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:id="@+id/container"
android:layout_height="fill_parent" >
</FrameLayout>
The layout has a FrameLayout
which is a view group to which you add/replace framgents
FragmentOne.java
FragmentOne uses interface as a callback to the activity to communicate value.
public class FragmentOne extends Fragment {
public interface ReturnData
{
public void sendData(String result);
}
ReturnData mCallback;
@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 = (ReturnData) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement ReturnData");
}
}
TextView tv2;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.frag1,container,false);
tv2 = (TextView) rootView.findViewById(R.id.textView2);
Button b= (Button) rootView.findViewById(R.id.button1);
b.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mCallback.sendData(tv2.getText().toString());
}
});
return rootView;
}
}
frag1.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="88dp"
android:text="Button" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="46dp"
android:text="This is Fragment One" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_centerHorizontal="true"
android:layout_marginTop="82dp"
android:text="Hello is communicated to Fragment Two on Button Click" />
</RelativeLayout>
FragmentTwo
public class FragmentTwo extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.frag2,container,false);
TextView tv1 = (TextView) rootView.findViewById(R.id.textView1);
String text = getArguments().getString("key");
tv1.append(text);
return rootView;
}
}
frag2.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="36dp"
android:text="Display : " />
</RelativeLayout>
Snaps