Java 如何仅查看ViewPager中的部分片段

Java 如何仅查看ViewPager中的部分片段,java,android,android-fragments,android-viewpager,fragment,Java,Android,Android Fragments,Android Viewpager,Fragment,我有一个ViewPager和一些片段。 我可以将所有片段添加到ViewPager中以查看整个页面。 例如: 我有命名为苹果、橘子、香蕉、芒果、葡萄、樱桃的碎片:6个标签 用户可以选择这些水果中的任意三种。 因此,让用户选择苹果、香蕉和葡萄 现在,ViewPager应该只显示苹果、香蕉和葡萄的3个选项卡 我该怎么做?我可以将整个水果设置为多个标签。但是根据选择,不需要的选项卡需要删除,或者只需要添加想要的选项卡 我将以下代码用作适配器: public class FruitFragAdapter

我有一个ViewPager和一些片段。 我可以将所有片段添加到ViewPager中以查看整个页面。 例如: 我有命名为苹果、橘子、香蕉、芒果、葡萄、樱桃的碎片:6个标签 用户可以选择这些水果中的任意三种。 因此,让用户选择苹果、香蕉和葡萄 现在,ViewPager应该只显示苹果、香蕉和葡萄的3个选项卡

我该怎么做?我可以将整个水果设置为多个标签。但是根据选择,不需要的选项卡需要删除,或者只需要添加想要的选项卡

我将以下代码用作适配器:

public class FruitFragAdapter extends FragmentStatePagerAdapter
{
    public FruitFragAdapter(FragmentManager fm)
    {
        super(fm);
    }


    public Fragment getItem(int position)
    {
        switch (position)
        {
            case 0: return new AppleFragment();
            case 1: return new OrangeFragment();
            case 2: return new BananaFragment();
            case 3: return new MangoFragment();
            case 4: return new GrapesFragment();
            case 5: return new CherryFragment();
        }
        return null;
    }


    @Override
    public int getCount()
    {
        return 6;
    }


    public CharSequence getPageTitle(int position)
    {
        switch (position)
        {
            case 0: return "Apple";
            case 1: return "Orange";
            case 2: return "Banana";
            case 3: return "Mango";
            case 4: return "Grapes";
            case 5: return "Cherry";
            default: return null;
        }
    }
}

你可以这样做

从用户选择的片段创建一个IntArray,如[0,3,4]或[3,4,2,1]等

用所选片段的数组初始化适配器

getItem
中,返回用户为该特定位置选择的片段。在这个示例中,我为此创建了一个函数
getFragmentBySelectedPosition

getCount
返回所选片段的数量(数组的长度)


我建议您创建一个包含片段标题和片段类名的数据类和一个实例化片段的方法(class.forName(className).newInstance())。创建与片段匹配的尽可能多的实例,将它们存储在mutableList中,让用户删除项,对它们进行排序,并将其作为参数传递给您的FroothFragaDapter,其余部分是根据所选片段列表对代码进行的微小修改。提到这个。比较容易,我指的是这个。这对我来说更容易理解。
class FruitFragAdapter(fm: FragmentManager, private val selectedFragments: IntArray) : FragmentStatePagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {

    private val appleFragment by lazy {
        AppleFragment().newInstance()
    }

    private val orangeFragment by lazy {
        OrangeFragment().newInstance()
    }

    private val bananaFragment by lazy {
        BananaFragment().newInstance()
    }

    private val mangoFragment by lazy {
        MangoFragment().newInstance()
    }

    private val grapesFragment by lazy {
        GrapesFragment().newInstance()
    }

    private val cherryFragment by lazy {
        CherryFragment().newInstance()
    }

    private fun getFragmentBySelectedPosition(position: Int): Fragment {
        return when (position) {
            0 -> appleFragment
            1 -> orangeFragment
            2 -> bananaFragment
            3 -> mangoFragment
            4 -> grapesFragment
            5 -> cherryFragment
            else -> throw IllegalArgumentException("No fragment for: $position")
        }
    }

    override fun getItem(position: Int): Fragment {
        return getFragmentBySelectedPosition(selectedFragments[position])
    }

    override fun getPageTitle(position: Int): CharSequence? {
        return when (selectedFragments[position]) {
            0 -> "Apple"
            1 -> "Orange"
            2 -> "Banana"
            3 -> "Mango"
            4 -> "Grapes"
            5 -> "Cherry"
            else -> ""
        }
    }

    override fun getCount(): Int {
        return selectedFragments.count()
    }
}