Android - ViewPager2 Fragment

 2023-12-10 阅读 30 评论 0

摘要:文章目錄1. 效果2. 添加ViewPager2控件3. 添加Fragment頁面4. 添加FragmentStateAdapter類的繼承類5. 添加ViewPager2的邏輯6. 示例代碼7. 參考 1. 效果 類似上一篇文章 Android - ViewPager2 只是改用Fragment實現每個頁面 2. 添加ViewPager2控件 在activity_main.xml中添加

文章目錄

  • 1. 效果
  • 2. 添加ViewPager2控件
  • 3. 添加Fragment頁面
  • 4. 添加FragmentStateAdapter類的繼承類
  • 5. 添加ViewPager2的邏輯
  • 6. 示例代碼
  • 7. 參考

1. 效果

類似上一篇文章 Android - ViewPager2
只是改用Fragment實現每個頁面

2. 添加ViewPager2控件

在activity_main.xml中添加 androidx.viewpager2.widget.ViewPager2 控件, 有些版本可能提示無此控件,需要在 build.gradle中添加依賴:implementation 'androidx.viewpager2:viewpager2:1.0.0'

添加ViewPager2控件后,activity_main.xml代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"><androidx.viewpager2.widget.ViewPager2android:id="@+id/viewpager"android:layout_width="match_parent"android:layout_height="match_parent"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent" /></androidx.constraintlayout.widget.ConstraintLayout>


3. 添加Fragment頁面

layout右鍵new,選擇Fragment -> Fragment(Blank)
在這里插入圖片描述
添加后會出現 fragment_blank.xmlBlankFragment.java 兩個文件。

fragment_blank.xml 中的代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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=".BlankFragment"><!-- TODO: Update blank fragment layout --><TextViewandroid:id="@+id/fragment_tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:textSize="30sp"android:text="@string/hello_blank_fragment" /></FrameLayout>

BlankFragment.java代碼修改如下:

public class BlankFragment extends Fragment {// TODO: Rename parameter arguments, choose names that match// the fragment initialization parameters, e.g. ARG_ITEM_NUMBERprivate static final String ARG_PARAM1 = "param1";// TODO: Rename and change types of parametersprivate String mParam1;private TextView mFragmentTv;private View mFragmentView;public BlankFragment() {// Required empty public constructor}/*** Use this factory method to create a new instance of* this fragment using the provided parameters.** @param param1 Parameter 1.* @return A new instance of fragment BlankFragment.*/// TODO: Rename and change types and number of parameterspublic static BlankFragment newInstance(String param1) {BlankFragment fragment = new BlankFragment();Bundle args = new Bundle();args.putString(ARG_PARAM1, param1);fragment.setArguments(args);return fragment;}@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);if (getArguments() != null) {mParam1 = getArguments().getString(ARG_PARAM1);}}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// Inflate the layout for this fragmentif (mFragmentView == null){mFragmentView = inflater.inflate(R.layout.fragment_blank, container, false);mFragmentTv = mFragmentView.findViewById(R.id.fragment_tv);mFragmentTv.setText(mParam1);}return mFragmentView;}
}


4. 添加FragmentStateAdapter類的繼承類

public class MyFragmentStateAdapter extends FragmentStateAdapter {private List<Fragment> mFragmentList;public MyFragmentStateAdapter(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle, List<Fragment> fragments) {super(fragmentManager, lifecycle);mFragmentList = fragments;}@NonNull@Overridepublic Fragment createFragment(int position) {return mFragmentList.get(position);}@Overridepublic int getItemCount() {return mFragmentList.size();}
}


5. 添加ViewPager2的邏輯

public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ViewPager2 viewPager2 = findViewById(R.id.viewpager);List<Fragment> fragmentList = new ArrayList<>();fragmentList.add(BlankFragment.newInstance("第一個頁面"));fragmentList.add(BlankFragment.newInstance("第二個頁面"));fragmentList.add(BlankFragment.newInstance("第三個頁面"));fragmentList.add(BlankFragment.newInstance("第四個頁面"));fragmentList.add(BlankFragment.newInstance("第五個頁面"));viewPager2.setAdapter(new MyFragmentStateAdapter(getSupportFragmentManager(), getLifecycle(), fragmentList));}
}


6. 示例代碼

ViewPager2 Fragment 示例代碼



7. 參考

更多詳細ViewPager2的例子,可以參考Android官方示例:Android ViewPager2 官方示例


版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/196099.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息