第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 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_34178710/article/details/85101417
今日推荐