现在我要做个Fragment与Fragment之间的通信小demo。
- 建立两个Fragment,然后各添加1个按钮和1个TextView。
- 单击Fragment1的按钮修改Fragment2里的TextView文本。
- 相同的,单击Fragment2里面的按钮修改Fragment1的TextView文本。
前期准备:在Activity里面放进两个fragment: 1和2,再为其各绑定View。
public class Fragment1 extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment1, null);
return rootView;
}
}
运行是这样的:
为两个xml文件都添加TextView和Button
接下来就要去找到按钮响应事件,在Fragment1和Fragment2的java文件中写:
Fragment1
public class Fragment1 extends Fragment {
private TextView tv1;
private Button button1;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment1, null);
button1 = (Button) rootView.findViewById(R.id.button1);//按钮
tv1 = (TextView) rootView.findViewById(R.id.textView1);//文本
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("在Fragment1响应点击按钮事件");
//得到当前Fragment所挂载的Activity,然后得到fragment2.
Fragment2 fragment2 = (Fragment2) getActivity().getFragmentManager().findFragmentById(R.id.fragment2);
fragment2.setText("内容变化了.....");
}
});
return rootView;
}
public void setText(String text) {//定义个修改文本内容的方法
tv1.setText(text);
}
}
Fragment2
public class Fragment2 extends Fragment {
private TextView tv2;
private Button button2;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment2, null);
button2 = (Button) rootView.findViewById(R.id.button2);//按钮
tv2 = (TextView) rootView.findViewById(R.id.textView2);//文本
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("在Fragment2响应点击按钮事件");
Fragment1 fragment1 = (Fragment1) getActivity().getFragmentManager().findFragmentById(R.id.fragment1);
//得到当前Fragment所挂载的Activity,然后得到fragment1.
fragment1.setText("内容变化了.....");
}
});
return rootView;
}
public void setText(String text) {
tv2.setText(text);
}
}
来看看模拟器
单击 按钮1:
单击 按钮2:
这是我在Fragment学习的一个小小的练习。请原谅我的乱码,这个问题我也花了时间去弄,暂时还没有找到问题所在,如果有大神知道可以评论教教我!感谢万分!