如何只查看 ViewPager 中的部分片段
How to view only some of the Fragments in a ViewPager
我有一个 ViewPager 和一些片段。
我可以将所有片段一起添加到 ViewPager 中以查看整体。
例如:
我有名为 Apple、Orange、Banana、Mango、Grapes、Cherry 的片段:6 个标签
用户可以选择 select 这些水果中的任意三种。
所以让用户选择 Apple、Banana 和 Grapes
现在 ViewPager 应该只显示 Apple、Banana 和 Grapes 的 3 个标签。
我该怎么做?我可以将整个水果设置为多个选项卡。但是根据 selection,需要删除不需要的标签或只需要添加想要的标签。
我有这个代码作为适配器:
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] 等。
使用所选片段的 IntArray 初始化您的适配器。
在 getItem
return 中,用户为该特定位置选择的片段。在示例中,我为此创建了一个函数 getFragmentBySelectedPosition
。
getCount
returns 所选片段的数量(IntArray 的长度)
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()
}
}
我有一个 ViewPager 和一些片段。 我可以将所有片段一起添加到 ViewPager 中以查看整体。 例如: 我有名为 Apple、Orange、Banana、Mango、Grapes、Cherry 的片段:6 个标签 用户可以选择 select 这些水果中的任意三种。 所以让用户选择 Apple、Banana 和 Grapes 现在 ViewPager 应该只显示 Apple、Banana 和 Grapes 的 3 个标签。
我该怎么做?我可以将整个水果设置为多个选项卡。但是根据 selection,需要删除不需要的标签或只需要添加想要的标签。
我有这个代码作为适配器:
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] 等。
使用所选片段的 IntArray 初始化您的适配器。
在 getItem
return 中,用户为该特定位置选择的片段。在示例中,我为此创建了一个函数 getFragmentBySelectedPosition
。
getCount
returns 所选片段的数量(IntArray 的长度)
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()
}
}