FragmentStatePagerAdapter
已从API 27中弃用,它可以替代FragmentStatePagerAdapter
private class MainPagerAdapter extends FragmentStatePagerAdapter {
MainPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Fragment result = new DummyFragment();
return result;
}
@Override
public int getCount() {
return 5;
}
}
以上代码显示FragmentStatePagerAdapter
,getItem
和super(fm);
已弃用
答案 0 :(得分:5)
仅将FragmentManager作为参数的构造函数被复制并更改为
public FragmentStatePagerAdapter(@NonNull FragmentManager fm,
@Behavior int behavior)
但是您可以通过使用以下构造函数来实现相同目的,还应该通过构造函数注入tabsNumber以避免使用硬编码数字,并通过getCount()返回它。
public PagerAdapter(FragmentManager fm, int NumOfTabs) {
super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
this.numberOfTabs= NumOfTabs;
}
@Override
public int getCount() {
return numberOfTabs;
}
有关更多详细信息,请查看AndroidX的官方文档
答案 1 :(得分:4)
您可以扩展
androidx.fragment.app.FragmentStatePagerAdapter;
并致电
super(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
在您的类的构造函数中
答案 2 :(得分:2)
以下构造函数执行相同的操作
super(@NonNull FragmentManager fm)
super(@NonNull FragmentManager fm, BEHAVIOR_SET_USER_VISIBLE_HINT)
通过BEHAVIOR_SET_USER_VISIBLE_HINT
已过时。您应该改为通过 BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
。
通过这些考试的区别在 FragmentPagerAdapter
中说明:
/**
* Indicates that Fragment#setUserVisibleHint(boolean) will be
* called when the current fragment changes.
*/
@Deprecated
public static final int BEHAVIOR_SET_USER_VISIBLE_HINT = 0;
/**
* Indicates that only the current fragment will be
* in the Lifecycle.State#RESUMED state. All other Fragments
* are capped at Lifecycle.State#STARTED.
*/
public static final int BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT = 1;
答案 3 :(得分:2)
这对我有用。
在科特林:
Android.xml
答案 4 :(得分:2)
public static class MyAdapter extends FragmentStatePagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
}
@Override
public int getCount() {
return NUM_ITEMS;
}
@Override
public Fragment getItem(int position) {
return ArrayListFragment.newInstance(position);
}
}
答案 5 :(得分:1)
该类已在API级别27.1.0中弃用。 支持v13 https://developer.android.com/reference/android/support/v13/app/FragmentPagerAdapter
使用支持v4中的FragmentStatePagerAdapter https://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter
答案 6 :(得分:1)
我知道这是一个老问题,但是现在两个FragmentStatePagerAdapter构造函数都已弃用。
相反,您可以扩展:
import androidx.viewpager2.adapter.FragmentStateAdapter
构造函数有点不同:
class DemoCollectionAdapter(fragment: Fragment) : FragmentStateAdapter(fragment) {
override fun getItemCount(): Int = 3
override fun createFragment(position: Int): Fragment {
return when (position) {
0 -> MyFragment()
1 -> MyFragment2()
2 -> MyFragment3()
}
}
}
所以在片段中:
class CollectionDemoFragment : Fragment() {
private lateinit var demoCollectionAdapter: DemoCollectionAdapter
private lateinit var viewPager: ViewPager2
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.collection_demo, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
viewPager = view.findViewById(R.id.pager)
val tabLayout = view.findViewById(R.id.tab_layout)
demoCollectionAdapter = DemoCollectionAdapter(this)
TabLayoutMediator(tabLayout, viewPager) { tab, position ->
tab.text = when (position) {
0 -> "Home"
1 -> "Search"
2 -> "Favorites"
}
}.attach()
viewPager.adapter = demoCollectionAdapter
}
}
并更改xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>
检查它为官方documentation
答案 7 :(得分:0)
根据Documentation,不推荐使用android.support.v13.app.FragmentPagerAdapter。
您可以将其替换为android.support.v4.app.FragmentPagerAdapter。
Check this out用于正式离职。
答案 8 :(得分:0)
您需要在MainPagerAdapter
中添加如下行为:
super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
答案 9 :(得分:0)
FragmentStatePagerAdapter
和 FragmentPagerAdapter
均已弃用。我们需要使用 ViewPager2 + FragmentStateAdapter
,因为 AndroidX
这里有两种实现上述的方法:
TabLayout
实现 ViewPager2
。这还包括整个过程中的各种更新ViewPager2
Fragment
的方法
这两种解决方案都有效。也请阅读 documentation 以获得更好的理解。