第7天ViewPager+Fragment+TabLayout新闻头部标题导航

本文介绍了如何使用ViewPager结合5个Fragment和TabLayout创建一个新闻头部导航的效果。通过设置ViewPager作为容器,存储Fragment和标题的ArrayList,使用FragmentPagerAdapter作为适配器,并重写相关方法如getCount(), getItem()和getPageTitle()来实现标题的显示。同时,文章提到了导入'com.android.support:design:27.0.0'依赖,提供布局activity_main.xml的设计和MainActivity.java及适配器MyFragmentPagerAdapter.java的代码实现。" 105934975,9119330,算法竞赛进阶指南:哈希表与字符串哈希应用,"['数据结构', '算法', '哈希表', '字符串处理', '算法竞赛']
摘要由CSDN通过智能技术生成

ViewPager

一.效果

二.思路:1个ViewPager+5个Fragment+1个FragmentPagerAdapter+TabLayout

1.容器:ViewPager
2.数据:ArrayList<Fragment ArrayList<String 标题
3.适配器:FragmentViewPager
4.TabLayout:需要导入依赖

重写的方法:
(1)getCount():返回数据源的总数量
(2)getItem():
(3)getPageTitle():返回标题

三.代码

(1)导入依赖:implementation 'com.android.support:design:27.0.0’或者

implementation ‘com.android.support:design:28.0.0

(2)布局activity_main.xml:ViewPager+TabLayout

<?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">
<!--tabLayout依赖-->
<android.support.design.widget.TabLayout
        app:tabSelectedTextColor="#E5AF35"
        app:tabTextColor="#969696"
        app:tabIndicatorColor="#E5AF35"
        app:tabIndicatorHeight="5dp"
        app:tabMode="scrollable"
        android:id="@+id/tb"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
</android.support.design.widget.TabLayout>
<android.support.v4.view.ViewPager
        android:id="@+id/vp"
        android:layout_weight="8"
        android:layout_height="0dp"
        android:layout_width="match_parent">

</android.support.v4.view.ViewPager>
</LinearLayout>

(3)Java代码:MainActivity.java


public class MainActivity extends AppCompatActivity {
    //视图
    private ViewPager vp;
    private TabLayout tb;
    //数据
    private ArrayList<Fragment> fragment_list=new ArrayList<>();
    private ArrayList<String> title_list=new ArrayList<>();//标题
    //适配器
    private MyFragmentPagerAdapter myFragmentPagerAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        initview();
        initdata();
        initadpater();
        //TODO tablayout和viewpager联系在一起
        tb.setupWithViewPager(vp);
    }

    private void initadpater() {
        myFragmentPagerAdapter=new MyFragmentPagerAdapter(getSupportFragmentManager(),fragment_list,title_list);
        vp.setAdapter(myFragmentPagerAdapter);
    }

    private void initdata() {
        fragment_list.add(new Fragment1());
        fragment_list.add(new Fragment2());
        fragment_list.add(new Fragment3());
        fragment_list.add(new Fragment4());
        title_list.add("我的");
        title_list.add("新闻");
        title_list.add("最热");
        title_list.add("最强");
    }

    private void initview() {
        vp=findViewById(R.id.vp);
        tb=findViewById(R.id.tb);

    }
}

(4)适配器代码:MyFragmentPagerAdapter.java

public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
    private ArrayList<Fragment> fragment_list;
    private ArrayList<String> title_list;

    public MyFragmentPagerAdapter(FragmentManager fm, ArrayList<Fragment> fragment_list,ArrayList<String> titile_list) {
        super(fm);
        this.fragment_list=fragment_list;
        this.title_list=titile_list;
    }
    @Override
    public Fragment getItem(int i) {
        return fragment_list.get(i);
    }
    @Override
    public int getCount() {
        return fragment_list.size();
    }
    //TODO 返回对应的标题
    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return title_list.get(position);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值