如何仅在ViewPager中查看某些片段

问题描述 投票:0回答:1

我有一个ViewPager和一些片段。我可以将所有片段一起添加到ViewPager中以查看整体。例如:我有名为苹果,橙子,香蕉,芒果,葡萄,樱桃的片段:6个标签将为用户提供选择这些水果中的任何三个的选项。因此,让用户选择了Apple,香蕉和葡萄现在,ViewPager应该只显示Apple,香蕉和葡萄的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;
        }
    }
}
java android android-fragments android-viewpager fragment
1个回答
0
投票

您可以做这样的事情。

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

使用所选片段的IntArray初始化适配器。

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

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()
}

}

© www.soinside.com 2019 - 2024. All rights reserved.