AndroidX中如何用fragments实现ViewPager
How to implement ViewPager with fragments in AndroidX
自从 Google 引入 androidX 以来,我在使用 viewpager 时遇到了问题。我想制作一个可以在片段之间滑动的选项卡布局。
getSupportFragmentManager() 现在已弃用并显示错误
ViewPagerAdapter(FragmentManager, int) in ViewPagerAdapter cannot be applied to (FragmentManager)
这是我的适配器:
public class ViewPagerAdapter extends FragmentPagerAdapter {
public ViewPagerAdapter(@NonNull FragmentManager fm, int behavior) {
super(fm, behavior);
}
@NonNull
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new RecentFragment();
case 1:
return new TracksFragment();
case 2:
return new AlbumFragment();
case 3:
return new GenresFragment();
}
return null;
}
@Override
public int getCount() {
return 4;
}
}
在我的 activity 中我需要调用它
ViewPager viewPager = findViewById(R.id.view_pager);
viewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager());
我找到了解决方案,在构造函数中我有第二个参数,在 viewpager 中我添加了页面位置并且工作正常。
public static int PAGE_POSITION = 4;
ViewPager viewPager = findViewById(R.id.view_pager);
viewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager(), PAGE_POSITION));
TabLayout tab = findViewById(R.id.tab_layout);
tab.setupWithViewPager(viewPager);
改用getChildFragmentManager
。
使用 ViewPager2 创建滑动视图并且适配器 class 必须扩展 FragmentStateAdapter。
例如:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SectionsPagerAdapter sectionsPagerAdapter = new SectionsPagerAdapter(this);
final ViewPager2 viewPager = findViewById(R.id.pager);
TabLayout tabs = findViewById(R.id.tab_layout);
viewPager.setAdapter(sectionsPagerAdapter);
new TabLayoutMediator(tabs, viewPager,
new TabLayoutMediator.TabConfigurationStrategy() {
@Override
public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
tab.setText("OBJECT " + (position + 1));
viewPager.setCurrentItem(tab.getPosition(),true);
}
}
).attach();
}
您的 ViewPagerAdapter
class 有一个带有 2 个参数的构造函数。
当您尝试创建一个新的 ViewPagerAdapter
时,您只使用了 1 个参数。
这正是错误消息告诉您的内容。
查看 FragmentPagerAdapter
class 的文档,看看第二个参数应该是什么。
自从 Google 引入 androidX 以来,我在使用 viewpager 时遇到了问题。我想制作一个可以在片段之间滑动的选项卡布局。 getSupportFragmentManager() 现在已弃用并显示错误
ViewPagerAdapter(FragmentManager, int) in ViewPagerAdapter cannot be applied to (FragmentManager)
这是我的适配器:
public class ViewPagerAdapter extends FragmentPagerAdapter {
public ViewPagerAdapter(@NonNull FragmentManager fm, int behavior) {
super(fm, behavior);
}
@NonNull
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new RecentFragment();
case 1:
return new TracksFragment();
case 2:
return new AlbumFragment();
case 3:
return new GenresFragment();
}
return null;
}
@Override
public int getCount() {
return 4;
}
}
在我的 activity 中我需要调用它
ViewPager viewPager = findViewById(R.id.view_pager);
viewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager());
我找到了解决方案,在构造函数中我有第二个参数,在 viewpager 中我添加了页面位置并且工作正常。
public static int PAGE_POSITION = 4;
ViewPager viewPager = findViewById(R.id.view_pager);
viewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager(), PAGE_POSITION));
TabLayout tab = findViewById(R.id.tab_layout);
tab.setupWithViewPager(viewPager);
改用getChildFragmentManager
。
使用 ViewPager2 创建滑动视图并且适配器 class 必须扩展 FragmentStateAdapter。 例如:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SectionsPagerAdapter sectionsPagerAdapter = new SectionsPagerAdapter(this);
final ViewPager2 viewPager = findViewById(R.id.pager);
TabLayout tabs = findViewById(R.id.tab_layout);
viewPager.setAdapter(sectionsPagerAdapter);
new TabLayoutMediator(tabs, viewPager,
new TabLayoutMediator.TabConfigurationStrategy() {
@Override
public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
tab.setText("OBJECT " + (position + 1));
viewPager.setCurrentItem(tab.getPosition(),true);
}
}
).attach();
}
您的 ViewPagerAdapter
class 有一个带有 2 个参数的构造函数。
当您尝试创建一个新的 ViewPagerAdapter
时,您只使用了 1 个参数。
这正是错误消息告诉您的内容。
查看 FragmentPagerAdapter
class 的文档,看看第二个参数应该是什么。