说明:外层两个Fragment我的,你的。我的中又包括两个Fragment。
Activity核心代码
public class FragmentActivity extends AppCompatActivity{
private RadioGroup group;
private FragmentManager manager;
private FragmentTransaction transaction;
Framgent1 fragment1;
Fragment2 fragment2;
public static String mesg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment);
init();
group = findViewById(R.id.radioGroup_group1);
group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId){
case R.id.radio_my:
getSupportFragmentManager().beginTransaction()
//.addToBackStack(null) //入栈
//.replace(R.id.freal_fragment,fragment2)
.hide(fragment2)
.show(fragment1)
.commit();
break;
case R.id.radio_your:
getSupportFragmentManager().beginTransaction()
////入栈
//.addToBackStack(null) //入栈
// .replace(R.id.freal_fragment,fragment1)
.hide(fragment1)
.show(fragment2)
.commit();
break;
}
}
});
}
/**
* 将Fragment加到事务中
*/
public void init(){
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
fragment1 = new Framgent1();
fragment2 = new Fragment2();
fragment1.setImpl(fragment2); //要接口给实现类(多态)
transaction.add(R.id.freal_fragment,fragment1);
transaction.add(R.id.freal_fragment,fragment2); //桔色
transaction.commit();
}
public void exit(){
int count = getSupportFragmentManager().getBackStackEntryCount();
if(count == 0){
finish();
}
getSupportFragmentManager().popBackStack();
}
}
Fragment1
public class Framgent1 extends Fragment {
private static final String LOG_ID = "amy";
Button button;
SendMessageImpl impl; //接口
Button button3;
Button button4;
Fragment3 f3;
Fragment4 f4;
public void setImpl(SendMessageImpl impl){
this.impl = impl;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
Log.d(LOG_ID,"onCreate");
super.onCreate(savedInstanceState);
//空白的Fragment
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
Log.d(LOG_ID,"onCreateView");
View view = inflater.inflate(R.layout.fragment1_layout,null);
button = view.findViewById(R.id.btn_fragment1);
button3 = view.findViewById(R.id.btn_fragment3);
button4 = view.findViewById(R.id.btn_fragment4);
f3 = new Fragment3();
f4 = new Fragment4();
getChildFragmentManager().beginTransaction()
.add(R.id.frame_fragment1,f3)
.add(R.id.frame_fragment1,f4)
.commit();
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
Log.d(LOG_ID,"onActivityCreated");
super.onActivityCreated(savedInstanceState);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Toast.makeText(getActivity(), "111", Toast.LENGTH_SHORT).show();
// //发送消息给Activity通过Handler方式
// Message message = new Message();
// message.what = 1;
// message.obj = "activity你好吗?";
// Fragment2.handler.sendMessage(message);
impl.fasong("fragment2你好吗?");
}
});
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//显示F3
getChildFragmentManager().beginTransaction()
.hide(f4)
.show(f3)
.commit();
}
});
button4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//显示F4
getChildFragmentManager().beginTransaction()
.hide(f3)
.show(f4)
.commit();
}
});
}
}
Fragment2
public class Fragment2 extends Fragment implements SendMessageImpl{
static TextView textView;
static String message;
public static Handler handler = new Handler(){
//收消息
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(msg.what == 1){
textView.setText(msg.obj.toString());
}
}
};
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment2_layout,null);
textView = view.findViewById(R.id.txt_fragment2);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Log.d("amy","onActivityCreated:"+message);
}
@Override //fragment2你好呀
public void fasong(String message) {
textView.setText(message); //fragment1发来的内容
}
}
Fragment3
public class Fragment3 extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment3_layout,null);
}
}
Fragment4
public class Fragment4 extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment4_layout,null);
}
}
接口
public interface SendMessageImpl {
public void fasong(String message);
}