简单的Fragment切换,Fragment嵌套Viewpager
主方法
public class MainActivity extends AppCompatActivity {
private FrameLayout frame;
private RadioGroup radioGroup;
private List<Fragment> list = new ArrayList<>();
private FragmentManager manager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initfragment();//添加Fragment到集合里
//获取控件
frame = (FrameLayout) findViewById(R.id.frame);
radioGroup = (RadioGroup) findViewById(R.id.rg);
//默认显示一个页面
manager = getSupportFragmentManager();
manager.beginTransaction().add(R.id.frame, list.get(0)).commit();
//切换页面的点击事件
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
public void onCheckedChanged(RadioGroup radioGroup, @IdRes int i) {
switch (i) {
case R.id.rbt1://点击按钮,切换页面,替换当前的帧布局中的页面
manager.beginTransaction().replace(R.id.frame, list.get(0)).commit();
break;
case R.id.rbt2:
manager.beginTransaction().replace(R.id.frame, list.get(1)).commit();
break;
}
}
});
}
添加fragment的方法
private void initfragment() {
//添加fragment
Fragment1 f1 = new Fragment1();
Fragment2 f2 = new Fragment2();
list.add(f1);
list.add(f2);
}
在Fragment中嵌套一个viewpager,viewpager加载子布局
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {//加载一个fragment
View view = inflater.inflate(R.layout.fragment1, container, false);
viewPager = view.findViewById(R.id.vp);//获取控件
return view;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
initfragment();//加载Fragment中的子布局用于滑动页面
viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));//设置适配器
}
private void initfragment() {
list = new ArrayList<>();
ChildFragment1 childFragment1 = new ChildFragment1();
ChildFragment2 childFragment2 = new ChildFragment2();
list.add(childFragment1);
list.add(childFragment2);
}
//Fragment的适配器
class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return list.get(position);//根据索引值返回相对应的Fragment
}
@Override
public int getCount() {
return list.size();//返回集合的长度
}
}
引用一个使用hide和show效果的代码片
//将所有Fragment添加到占位布局
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
blankFragment01 = new BlankFragment01();
fragmentTransaction
.add(R.id.fl_zhanwei, blankFragment01)
.commit();
//RadioGroupd点击监听
group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, @IdRes int i) {
hideFragments();//隐藏所有Fragment;
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
switch (i) {
case R.id.but1:
fragmentTransaction.show(blankFragment01).commit();
break;
case R.id.but2:
if (blankFragment02 == null) {
blankFragment02 = new BlankFragment02();
fragmentTransaction.add(R.id.fl_zhanwei, blankFragment02).commit();
} else {
fragmentTransaction.show(blankFragment02).commit();
}
break;
case R.id.but3:
if (blankFragment03 == null) {
blankFragment03 = new BlankFragment03();
fragmentTransaction.add(R.id.fl_zhanwei, blankFragment03).commit();
} else {
fragmentTransaction.show(blankFragment03).commit();
}
break;
case R.id.but4:
if (blankFragment04 == null) {
blankFragment04 = new BlankFragment04();
fragmentTransaction.add(R.id.fl_zhanwei, blankFragment04).commit();
} else {
fragmentTransaction.show(blankFragment04).commit();
}
break;
}
}
});
//隐藏所有Fragment的方法
public void hideFragments() {
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
if (blankFragment01 != null && blankFragment01.isAdded()) {
fragmentTransaction.hide(blankFragment01);
}
if (blankFragment02 != null && blankFragment02.isAdded()) {
fragmentTransaction.hide(blankFragment02);
}
if (blankFragment03 != null && blankFragment03.isAdded()) {
fragmentTransaction.hide(blankFragment03);
}
if (blankFragment04 != null && blankFragment04.isAdded()) {
fragmentTransaction.hide(blankFragment04);
}
fragmentTransaction.commit();
}