TabLayout + ViewPager + Fragment实现类似新闻栏目动态切换

1,此次文章讲述如何利用TabLayout + ViewPager + Fragment结构做一个内容切换;

  • 主要类文件和布局文件:
  • 1个adapter适配器文件,如:scanFragmentPagerAdapter;
  • 2个class类文件+1个主class类文件,如:ScanFragment1,ScanFragment2,MyActivityFragment;
  • 2个子布局文件+1个TabLayout + ViewPager布局界面;如:conent_fargment,scanfragment1,scanfragment2;

2,其次需要注意的是需要导入包文件,放置在app-bulide下,26.1.0是根据你当前android版本号来引入:

 compile 'com.android.support:appcompat-v7:26.1.0'
    compile 'com.android.support:design:26.1.0'

3,好,具体的思路/类文件,配置文件都弄清楚了,接下来看:

  • conent_fargment布局界面:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <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"
        android:orientation="vertical"
        tools:context="com.noonecode.tablayoutdemo.MainActivity">
        <android.support.design.widget.TabLayout
            android:id="@+id/tablayout2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <android.support.v4.view.ViewPager
            android:id="@+id/viewpager2"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1">
        </android.support.v4.view.ViewPager>
    </LinearLayout>
</android.support.v4.widget.DrawerLayout>
  • scanfragment1,scanfragment2布局,我这儿就建立一个了。
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="11111"/>

</LinearLayout>

</android.support.constraint.ConstraintLayout>
  • scanFragmentPagerAdapter适配器界面:
public class scanFragmentPagerAdapter extends FragmentPagerAdapter {
    private int num;
    private HashMap<Integer, Fragment> mFragmentHashMap = new HashMap<>();

    public scanFragmentPagerAdapter(FragmentManager fm, int num) {
        super(fm);
        this.num = num;
    }

    @Override
    public Fragment getItem(int position) {

        return createFragment(position);
    }

    @Override
    public int getCount() {
        return num;
    }

    private Fragment createFragment(int pos) {
        Fragment fragment1 = mFragmentHashMap.get(pos);

        if (fragment1 == null) {
            switch (pos) {
                case 0:
                    fragment1 = new ScanFragment1();
                    Log.i("fragment", "fragment1");
                    break;
                case 1:
                    fragment1 = new ScanFragment2();
                    Log.i("fragment", "fragment2");
                    break;
            }
            mFragmentHashMap.put(pos, fragment1);
        }
        return fragment1;
    }
}
  • ScanFragment1,ScanFragment2类文件,也同上,只创建一个,剩余的自己需要几个就建立几个类文件;
public class ScanFragment1 extends Fragment{
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate( R.layout.scanfragment1, container, false);
    }
}
  • MyActivityFragment主文件:
public class MyActivityFragment extends AppCompatActivity implements View.OnClickListener {
//    private LinearLayout back;
    private TabLayout tabLayout2;
    private ViewPager viewPager2;
    private Button tiaozhuan1;
    private List<Fragment> list2;
    private MyAdapter adapter2;
    private String[] titles = {"用户", "标签"};
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView( R.layout.conent_fargment);
        viewPager2 = (ViewPager) findViewById(R.id.viewpager2);
        tabLayout2 = (TabLayout) findViewById(R.id.tablayout2);
//        back = findViewById(R.id.back);
//        back.setOnClickListener(this);
        list2 = new ArrayList<>();
        list2.add(new ScanFragment1());
        list2.add(new ScanFragment2());
        //ViewPager的适配器
        adapter2 = new MyAdapter(getSupportFragmentManager());
        viewPager2.setAdapter(adapter2);
        //绑定
        tabLayout2.setupWithViewPager(viewPager2);
        //实例化
    }

    @Override
    public void onClick(View v) {
//        switch (v.getId()){
//            case R.id.back:
//                finish();
//             break;
//        }
    }
    class MyAdapter extends FragmentPagerAdapter {

        public MyAdapter(FragmentManager fm) {
            super(fm);
        }
        @Override
        public Fragment getItem(int position) {
            return list2.get(position);
        }

        @Override
        public int getCount() {
            return list2.size();
        }

        //重写这个方法,将设置每个Tab的标题
        @Override
        public CharSequence getPageTitle(int position) {
            return titles[position];
        }
    }
}

讲述结束完毕,主要归纳就这7就文件,若你们需求listview,只需要在当前类文件引入listview和适配器就ok,若有疑问或不懂者可以私信,评论!谢谢!!

猜你喜欢

转载自blog.csdn.net/qq_37523448/article/details/80262441