android-fragments 在Android中获取viewpager2中的当前片段

h5qlskok  于 2022-11-14  发布在  Android
关注(0)|答案(3)|浏览(347)

在我迁移到viewPager2之前,我以这种方式获取当前片段,以使用其中的方法:

Fragment myFragment = (Fragment) viewPager.getAdapter().instantiateItem(viewPager, viewPager.getCurrentItem());

但是,现在我在instantiateItem上得到一个错误:
无法解析方法“text.xml”,无法解析方法“text.xml”
我不使用Tag在ViewPager适配器中创建片段:

private class MyPagerAdapter extends FragmentStateAdapter {

    public MyPagerAdapter(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle) {
        super(fragmentManager, lifecycle);
    }

    @NonNull
    @Override
    public Fragment createFragment(int position) {
        return ScreenFragment.newInstance(position);
    }

    @Override
    public int getItemCount() {
        return 5;
    }
}

那么,我如何才能在viewPager2中获得当前片段?

q5iwbnjs

q5iwbnjs1#

您可以使用HashMap来执行此操作:

private HashMap<Integer, Fragment> hashMap = new HashMap<>();
@Override
public Fragment createFragment(int position) {
     Fragment fragment = ScreenFragment.newInstance(position);
     hashMap.put(position, fragment);
     return fragment;
}

然后以这种方式获取当前片段:

ScreenFragment screenFragment = (ScreenFragment) hashMap.get(viewPager.getCurrentItem());
i1icjdpr

i1icjdpr2#

@Zain提供的完美而简单的解决方案。
我只想再补充一点:
您必须通过活动片段管理器示例调用childFragmentManager。

SupportFragmentManager.Fragments[0].ChildFragmentManager.Fragments[0];
wnavrhmk

wnavrhmk3#

也许使用ViewPager2的一种更简单的方法是执行以下操作
childFragmentManager.fragments[viewPager.currentItem - 1]
这将给予您能够访问当前片段。

相关问题