第16天ViewPager案例4:ViewPager+Fragment嵌套
ViewPager
一.效果
二.思路:
(1)父Viewpager:RadioGroup+Viewpager+5个Fragment (Fragment管理者:getSupportFragmentManager)
(2)首页Fragment:ViewPager+5个Fragment+tablayout(Fragment管理者:getChildFragmentManager)
三.父Viewpager代码
(1)导入依赖:implementation ‘com.android.support:design:25.2.0’
(2)创建底部导航的5个Fragment
(3)布局activity_main.xml:ViewPager+RadioButton
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<android.support.v4.view.ViewPager
android:id="@+id/vp"
android:layout_weight="10"
android:layout_width="match_parent"
android:layout_height="0dp">
</android.support.v4.view.ViewPager>
<RadioGroup
android:id="@+id/rg"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="horizontal">
<RadioButton
android:id="@+id/rb1"
android:textAlignment="center"
android:drawableTop="@drawable/selector"
android:button="@null"
android:text="首页"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<RadioButton
android:id="@+id/rb2"
android:textAlignment="center"
android:drawableTop="@drawable/selector"
android:button="@null"
android:text="点播"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<RadioButton
android:id="@+id/rb3"
android:textAlignment="center"
android:drawableTop="@drawable/selector"
android:button="@null"
android:text="视频"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<RadioButton
android:id="@+id/rb4"
android:textAlignment="center"
android:drawableTop="@drawable/selector"
android:button="@null"
android:text="我的"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content" />
</RadioGroup>
</LinearLayout>
(4)Java代码:MainActivity.java
public class MainActivity extends AppCompatActivity {
private ViewPager vp;
private RadioGroup rg;
private RadioButton rb1,rb2,rb3,rb4;
//数据
private ArrayList<Fragment> fragment_list=new ArrayList<>();
//适配器
private MyFragementPagerAdapter myFragementPagerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initview();
initdata();
initadpater();
initlistener();
}
private void initlistener() {
rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
//checkedId:选中的rb的id
if(rb1.getId()==checkedId){
vp.setCurrentItem(0);
}
if(rb2.getId()==checkedId){
vp.setCurrentItem(1);
}
if(rb3.getId()==checkedId){
vp.setCurrentItem(2);
}
if(rb4.getId()==checkedId){
vp.setCurrentItem(3);
}
}
});
}
private void initadpater() {
myFragementPagerAdapter=new MyFragementPagerAdapter(getSupportFragmentManager(),fragment_list);
vp.setAdapter(myFragementPagerAdapter);
}
private void initdata() {
fragment_list.add(new Fragment1());
fragment_list.add(new Fragment2());
fragment_list.add(new Fragment3());
fragment_list.add(new Fragment4());
}
private void initview() {
vp=findViewById(R.id.vp);
rg=findViewById(R.id.rg);
rb1=findViewById(R.id.rb1);
rb2=findViewById(R.id.rb2);
rb3=findViewById(R.id.rb3);
rb4=findViewById(R.id.rb4);
}
}
(4)适配器代码:MyFragmentPagerAdapter.java
public class MyFragementPagerAdapter extends FragmentPagerAdapter {
private ArrayList<Fragment> list;
public MyFragementPagerAdapter(FragmentManager fm, ArrayList<Fragment> list) {
super(fm);
this.list=list;
}
@Override
public Fragment getItem(int i) {
return list.get(i);
}
@Override
public int getCount() {
return list.size();
}
}
四.首页Fragment代码
(1)导入依赖:implementation ‘com.android.support:design:25.2.0’
(2)创建tablayout的5个fragment
(3)布局fragment_fragment1.xml:ViewPager+tabLayout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Fragment1"
android:orientation="vertical">
<android.support.design.widget.TabLayout
android:id="@+id/tb"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="0dp">
</android.support.design.widget.TabLayout>
<android.support.v4.view.ViewPager
android:id="@+id/vp1"
android:layout_weight="10"
android:layout_width="match_parent"
android:layout_height="0dp">
</android.support.v4.view.ViewPager>
</LinearLayout>
(4)Java代码:Fragment1 .java
public class Fragment1 extends Fragment {
private TabLayout tb;
private ViewPager vp1;
private ArrayList<Fragment> fragment_list=new ArrayList<>();
private ArrayList<String> title_list=new ArrayList<>();
private MyFragmentPagerAdapter2 myFragmentPagerAdapter2;
public Fragment1() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.i("aaa", "onCreateView: ");
View view=inflater.inflate(R.layout.fragment_fragment1, container, false);
//TODO 视图
tb=view.findViewById(R.id.tb);
vp1=view.findViewById(R.id.vp1);
//TODO 适配器
initadapter();
//TODO 关联
tb.setupWithViewPager(vp1);
return view;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//TODO 数据:不要在onCreateView里面添加数据,不然会重复的
initdata();
}
@Override
public void onDestroyView() {
super.onDestroyView();
Log.i("aaa", "onDestroyView: ");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.i("aaa", "onDestroy: ");
}
private void initadapter() {
//使用getChildFragmentManager管理者进行管理
myFragmentPagerAdapter2=new MyFragmentPagerAdapter2(getChildFragmentManager(),fragment_list,title_list);
vp1.setAdapter(myFragmentPagerAdapter2);
}
private void initdata() {
fragment_list.add(new Fragment11());
fragment_list.add(new Fragment12());
fragment_list.add(new Fragment13());
fragment_list.add(new Fragment14());
title_list.add("111");
title_list.add("222");
title_list.add("333");
title_list.add("444");
}
}
(4)适配器代码:MyFragmentPagerAdapter2 .java
public class MyFragmentPagerAdapter2 extends FragmentPagerAdapter{
private ArrayList<Fragment> list1;
private ArrayList<String> list2;
public MyFragmentPagerAdapter2(FragmentManager fm, ArrayList<Fragment> list1,ArrayList<String> list2) {
super(fm);
this.list1=list1;
this.list2=list2;
}
@Override
public Fragment getItem(int i) {
return list1.get(i);
}
@Override
public int getCount() {
return list1.size();
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return list2.get(position);
}
}
总结:代码结构:
源代码地址:
https://pan.baidu.com/s/1a1AG6mcWj1kkp670uXmfZw
扫描二维码关注公众号,回复:
4657341 查看本文章