简体   繁体   English

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

[英]Java Android - Dynamic load fragment (ViewPager)

In settngs existed checkbox, if it is checked, then a specific fragment must not be loaded. 在settngs existed复选框中,如果选中该复选框,则不得加载特定片段。 I have just 4 fragment and I use FragmentStatePagerAdapter to show them. 我只有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;
  }

}

As show fragments, which are not only check in the settings? 作为显示片段,不仅要检查设置? I get value (true of false (Check or Uncheck) fragment, but how do not show this fragment, i dont know. 我得到了价值(假(检查或取消检查)为假的片段的真值,但我不知道如何不显示该片段。

You have to adapt your getItem() method as well as the getCount() method. 您必须调整getItem()方法以及getCount()方法。

Let's assume you have a method shouldShowFragment(int fragmentNumber) that tells me for a given fragment number from 0 to 3, whether it should be shown or not (depending on the settings). 假设您有一个方法shouldShowFragment(int fragmentNumber) ,它告诉我给定的片段号(从0到3),是否应该显示(取决于设置)。

Now, implement getCount() like so to return the number of fragments that should be shown: 现在,像这样实现getCount()以返回应该显示的片段数:

public int getCount() {
    int cnt = 0;
    for (int i = 0; i < 4; i++) {
        if (shouldShowFragment(i)) cnt++;
    }
    return cnt;
}

And implement getItem() like so to take the not showing fragments into account: 并像这样实现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;
}

First of all Save the all check buttons state globally(ie in shared preferences like btn1.setChecked == true/false whatever) and in above code do like below:- 首先,全局保存所有检查按钮的状态(例如,在共享首选项中,如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;
  }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM