Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android-动态加载片段(ViewPager)_Java_Android_Android Fragments - Fatal编程技术网

Java Android-动态加载片段(ViewPager)

Java Android-动态加载片段(ViewPager),java,android,android-fragments,Java,Android,Android Fragments,在settngs existed复选框中,如果选中,则不能加载特定片段。我只有4个片段,我使用FragmentStatePagerAdapter来显示它们 public class TabPagerAdapter extends FragmentStatePagerAdapter { public TabPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem

在settngs existed复选框中,如果选中,则不能加载特定片段。我只有4个片段,我使用FragmentStatePagerAdapter来显示它们

public class TabPagerAdapter extends FragmentStatePagerAdapter {

    public TabPagerAdapter(FragmentManager fm) {
    super(fm);
  }

  @Override
  public Fragment getItem(int i) {
    switch (i) {
        case 0:
            return new Fragment_One();
        case 1:
            return new Fragment_Two();
        case 2:
            return new Fragment_Three();
        case 3:
            return new Fragment_Four();
        }
    return null;
  }

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

}

如图所示,哪些片段不只是签入设置?我得到值(true of false(Check或Uncheck)片段,但如何不显示此片段,我不知道。

首先全局保存所有检查按钮状态(即在共享首选项中,如btn1.setChecked==true/false,无论什么),并在上述代码中执行以下操作:-

   @Override
  public Fragment getItem(int i) {
    switch (i) {
        case 0:
            if(btn0.isChecked == true)
            return new Fragment_One();
        case 1:
           if(btn1.isChecked == true)
            return new Fragment_Two();
        case 2:
           if(btn2.isChecked == true)
            return new Fragment_Three();
        case 3:
           if(btn3.isChecked == true)
            return new Fragment_Four();
        }
    return null;
  }

您必须调整
getItem()
方法以及
getCount()
方法

假设您有一个方法
shouldShowFragment(int fragmentNumber)
,它告诉我对于从0到3的给定片段编号,是否应该显示它(取决于设置)

现在,像这样实现getCount()以返回应该显示的片段数:

public int getCount() {
    int cnt = 0;
    for (int i = 0; i < 4; i++) {
        if (shouldShowFragment(i)) cnt++;
    }
    return cnt;
}
public int getCount(){
int-cnt=0;
对于(int i=0;i<4;i++){
if(shouldShowFragment(i))cnt++;
}
返回cnt;
}
并像这样实现getItem(),以考虑不显示片段:

public Fragment getItem(int position) {
    int cnt = -1;     
    for (int i = 0; i < 4; i++) {
        if (shouldShowFragment(i)) cnt++;
        if (cnt == position) {
            switch(i) {
                case 0 : return new Fragment_One();
                case 1 : return new Fragment_Two();
                case 2 : return new Fragment_Three();
                case 3 : return new Fragment_Four();
            }
        }
    }
    return null;
}
公共片段getItem(int位置){
int cnt=-1;
对于(int i=0;i<4;i++){
if(shouldShowFragment(i))cnt++;
如果(cnt==位置){
开关(一){
案例0:返回新片段_One();
案例1:返回新片段_Two();
案例2:返回新片段_Three();
案例3:返回新片段_Four();
}
}
}
返回null;
}