两个简单Fragment之间的通信

时间:2022-06-23 20:15:14

现在我要做个Fragment与Fragment之间的通信小demo。

  • 建立两个Fragment,然后各添加1个按钮和1个TextView。
  • 单击Fragment1的按钮修改Fragment2里的TextView文本。
  • 相同的,单击Fragment2里面的按钮修改Fragment1的TextView文本。

前期准备:在Activity里面放进两个fragment: 1和2,再为其各绑定View。

两个简单Fragment之间的通信

两个简单Fragment之间的通信

public class Fragment1 extends Fragment {

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

View rootView = inflater.inflate(R.layout.fragment1, null);
return rootView;

}
}

运行是这样的:两个简单Fragment之间的通信


为两个xml文件都添加TextView和Button

两个简单Fragment之间的通信

两个简单Fragment之间的通信


接下来就要去找到按钮响应事件,在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);
}

}

来看看模拟器

两个简单Fragment之间的通信

单击 按钮1

两个简单Fragment之间的通信

单击 按钮2

两个简单Fragment之间的通信

这是我在Fragment学习的一个小小的练习。请原谅我的乱码,这个问题我也花了时间去弄,暂时还没有找到问题所在,如果有大神知道可以评论教教我!感谢万分!