当前位置: 首页 > news >正文

安卓 Frament + ViewPager使用示例

1. 组成架构

在这里插入图片描述

  • 整个架构被包在一个外部Fragment之中,也可以放在一个Activity之中,随意。
  • 外部的fragment包含了两个组件,即途中的ViewPagerTabLayout
  • ViewPager要套上一个FragmentStatePagerAdapter ,适配器负责new出一个个fragment,这些fragment object就是负责装数据的一个个页面。
  • ViewPager可以和TabLayout进行关联

2. 实现步骤

2.1 创建内部的fragment object和外部的Fragment


public class ObjectFragment extends Fragment {private static String OBJ_INDEX = "objectIndex";private String mIndex;public ObjectFragment() {}public static ObjectFragment newInstance(String param1) {ObjectFragment fragment = new ObjectFragment();Bundle args = new Bundle();args.putString(OBJ_INDEX, param1);fragment.setArguments(args);return fragment;}@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);if (getArguments() != null) {mIndex = getArguments().getString(OBJ_INDEX);}}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {return inflater.inflate(R.layout.fragment_object, container, false);}@Overridepublic void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {((TextView) view.findViewById(R.id.tv_frg_obj)).setText("item" + mIndex);}}
public class OuterFragment extends Fragment {public OuterFragment() {// Required empty public constructor}public static OuterFragment newInstance() {OuterFragment fragment = new OuterFragment();return fragment;}@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// Inflate the layout for this fragmentreturn inflater.inflate(R.layout.fragment_outer, container, false);}
}

下面是OuterFragment的页面,由架构图可以看出,外部的fragment包含了ViewPagerTabLayout,但是在具体的页面中,TabLayout被放进了ViewPager

    <androidx.viewpager.widget.ViewPagerandroid:id="@+id/pager"android:layout_width="match_parent"android:layout_height="match_parent"><com.google.android.material.tabs.TabLayoutandroid:id="@+id/tab_layout"android:layout_width="match_parent"android:layout_height="wrap_content" /></androidx.viewpager.widget.ViewPager>

2.2 创建FragmentStatePagerAdapter适配器

这个东西就是ViewPager的适配器

public class MyFragmentStatePagerAdapter extends FragmentStatePagerAdapter {public MyFragmentStatePagerAdapter(@NonNull FragmentManager fm) {super(fm);}@NonNull@Overridepublic Fragment getItem(int position) {Fragment fragment = ObjectFragment.newInstance(position + 1 + "");return fragment;}@Overridepublic int getCount() {return 10;}@Overridepublic CharSequence getPageTitle(int position) {return "" + (position + 1);}}

2.3 给ViewPager设置适配器

这里的步骤都在OuterFragment中操作

添加以下成员:

MyFragmentStatePagerAdapter fragmentStatePagerAdapter;
ViewPager viewPager;

在以下函数中进行设置:

    @Overridepublic void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {//设置ViewPager的适配器viewPager = view.findViewById(R.id.pager);fragmentStatePagerAdapter = new MyFragmentStatePagerAdapter(getChildFragmentManager());viewPager.setAdapter(fragmentStatePagerAdapter);//设置TabLayout与viewPager关联TabLayout tabLayout = view.findViewById(R.id.tab_layout);tabLayout.setupWithViewPager(viewPager);}

3. 启动

在MainActivity中添加外部的OuterFragment

3.1 布局文件中添加FrameLayout

<FrameLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/fr_container"android:orientation="horizontal">
</FrameLayout>

3.2 启动Fragment

public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);OuterFragment outerFragment = new OuterFragment();FragmentManager manager = getSupportFragmentManager();FragmentTransaction transaction = manager.beginTransaction();transaction.add(R.id.fr_container, outerFragment,"1");transaction.addToBackStack(null);transaction.commit();}
}

在这里插入图片描述

http://www.lryc.cn/news/34138.html

相关文章:

  • 【银行测试】必看的四类题型:这可是最经典的一套题目了
  • 跨源资源共享(CORS)-亲测理解,以及对http的状态,参数的理解和使用,对预检请求的触发和解决
  • 学生使用的台灯该怎么选择?2023适合学生房间的灯推荐
  • 23种设计模式-桥接模式(安卓应用场景介绍)
  • 2021牛客OI赛前集训营-提高组(第四场) T3快速访问
  • 【大数据是什么】
  • 大数据 | centos7图形界面无法执行yum命令
  • 三维人脸实践:基于Face3D的渲染、生成与重构 <一>
  • Javascript 设计模式
  • JAVA-文档工具screw-gui
  • 开源鸿蒙南向嵌入学习笔记——NAPI框架学习(一)
  • Spring - Spring框架概述面试题总结
  • 学习python好就业么
  • 瑞幸咖啡的最终目标并不是做国内市场大哥
  • GPT 模型介绍 | GPT3 / GPT3.5 + Flask | Github源码链接
  • 蓝桥杯入门即劝退(二十六)组合问题(回溯算法)
  • 现代卷积神经网络(ResNet)
  • PTA:L1-019 谁先倒、L1-020 帅到没朋友、L1-021 重要的话说三遍(C++)
  • STL常见容器之set/multiset、map/multimap
  • ThreadLocal 实现原理
  • BUUCTF [羊城杯 2020]easyre 题解
  • 网络协议(十二):HTTPS(SSL/TLS、TLS1.2的连接)
  • 九九乘法表--课后程序(Python程序开发案例教程-黑马程序员编著-第3章-课后作业)
  • 在超算上安装文件树命令tree
  • 论文投稿指南——中文核心期刊推荐(经济管理)
  • 在vue中如果computed属性是一个异步操作怎么办?
  • SRP合批问题
  • 蓝牙5.1低功耗SOC 私有协议2.4GHz芯片HS6621
  • 数据库连接池
  • Arrays-sort-的用法