AndroidUI——使用TabLayout实现分页

本文介绍了如何在Android中使用TabLayout和ViewPager实现分页效果,包括主页面布局、子页面Fragment的创建、适配器的编写以及通过RecyclerView实现List布局。通过这种方式,可以创建一个可滑动可点击的分页用户界面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现一下TabLayout与ViewPager结合的可滑动可点击的分页效果。尽量最小实现。

主页面布局

<?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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.design.widget.TabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabIndicatorColor="#ff0000"
        app:tabMode="scrollable" />

    <android.support.v4.view.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

</LinearLayout>

主界面布局很简单,上边是一个TabLayout,包含了许多Tab,显示标题。下边是一个ViewPager,显示每一页的内容。

主页面代码

public class TabLayoutActivity extends AppCompatActivity {

    private ViewPager mViewPager;
    private TabLayout mTabLayout;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tab_layout);
        mViewPager = findViewById(R.id.viewPager);
        initViewPager();

    }

    private void initViewPager() {
        mTabLayout = findViewById(R.id.tabs);
        List<String> titles = new ArrayList<>();
        titles.add("动漫");
        titles.add("音乐");
        titles.add("体育");
        titles.add("新闻");
        
        List<Fragment> fragments = new ArrayList<>();
        for (int i = 0; i < titles.size(); i++) {
        	//这里暂时每个页面都使用同样的fragment,内容是一样的
            fragments.add(new ListFragment());
        }
        //自己实现的Adapter,下方给出代码
        FragmentAdapter adapter = new FragmentAdapter(getSupportFragmentManager(), fragments, titles);
        mViewPager.setAdapter(adapter);
        mTabLayout.setupWithViewPager(mViewPager);
    }
}

子页面

每一个页面都是一个fragment,为了简单我们先只放一个TextView来实现。

public class ListFragment extends Fragment {
    private TextView mTextView;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        mTextView = new TextView(getContext());
        mTextView.setText("我是小Item");
        return mTextView;

    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }
}

界面适配器

通过AdapterLayout把Tab和ViewPager结合起来

public class FragmentAdapter extends FragmentStatePagerAdapter {

    private List<Fragment> mFragments;
    private List<String> mTitles;

    public FragmentAdapter(FragmentManager fm, List<Fragment> fragments,List<String> titles) {
        super(fm);
        mFragments = fragments;
        mTitles = titles;
    }

    @Override
    public Fragment getItem(int position) {
        return mFragments.get(position);
    }

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

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        String title = mTitles.get(position);
        return title;
    }

主要覆盖了几个主要方法,同时记得主动覆盖getPageTitle方法,将对应的title值返回。
在这里插入图片描述
界面可以正常显示出来了,滑动点击功能也正常,如果需要补充内容布局,需要在Fragment里再次修改。

用RecyclerView实现List布局

修改ListFragment类,使用RecyclerView实现List效果。

public class ListFragment extends Fragment {
    //private TextView mTextView;
    private RecyclerView mRecyclerView;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        //mTextView = new TextView(getContext());
        //mTextView.setText("我是小Item");
        //return mTextView;
        mRecyclerView = new RecyclerView(getContext());
        return mRecyclerView;

    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(mRecyclerView.getContext()));
        //自己实现Adapter,代码在下方
        mRecyclerView.setAdapter(new RecyclerViewAdapter(getActivity()));
    }
}

RecyclerViewAdapter代码

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {

    private Context context;

    public RecyclerViewAdapter(Context context) {
        this.context = context;
    }

    @NonNull
    @Override
    public RecyclerViewAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    	//这个view里实现了一个TextView,读者可以自己实现其他的
        View view = LayoutInflater.from(context).inflate(R.layout.list_item_card_item,parent,false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerViewAdapter.ViewHolder holder, int position) {
        final View view = holder.mView;
        //设置一个点击事件,由于没有数据暂时不设置数据。
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(context, "嗷嗷嗷", Toast.LENGTH_SHORT).show();
            }
        });
    }

    @Override
    public int getItemCount() {
    	//实际使用时应该返回数据数量,这里先写死为10
        return 10;
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        private View mView;

        public ViewHolder(View view) {
            super(view);
            this.mView = view;
        }
    }
}

实现效果如下。在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值