簡體   English   中英

在 android 的 viewpager2 中獲取當前片段

[英]Get current fragment in viewpager2 in android

在遷移到 viewPager2 之前,我以這種方式獲取當前片段以使用其中的方法:

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

但是,現在我在instantiateItem上得到一個錯誤:

無法解析方法“instantiateItem(androidx.viewpager2.widget.ViewPager2,int)”

我不使用標簽在 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 中獲取當前片段?

您可以使用 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());

也許 ViewPager2 更簡單的方法是做類似的事情

childFragmentManager.fragments[viewPager.currentItem - 1]

這將使您可以訪問當前片段。

@Zain 提供的完美而簡單的解決方案。

只想補充一點:

您必須通過活動片段管理器實例調用 childFragmentManager。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM