0

当使用FragmentStatePagerAdapter“这是通过对象的集合用于分页更好为页数是未定义的。在用户导航到其他页面销毁片段,其最小化存储器使用” [FragmentStatePagerAdapter只收页面当前

这个FragmentStatePagerAdapter的工作原理如下,当你第一次加载0的位置时,如果你打开页面1加载页面0和页面1,加载页面3,并且如果之后(在创建基础之后当前位置)。 如果我去实际位置的后面标签再次加载数据,如果它缓存视图,我的问题 在这种行为看来,实际视图的左侧和右侧视图被缓存,有某种 省略此行为

您在StackOverflow上发现尚未明确的答案,找到上网的选项,其中提及修改这一类 FragmentStatePagerAdapter继承PageAdapter,我还没有解决这个问题了5天,请如果有人能帮助我解释我如何解决它,我会无限的快乐。 ,理应清除FragmentStatePagerAdapter缓存 [

//的getItem它不工作,你所期望的方式 自定义类(就吹大当前片段) 自定义类,理应清除FragmentStatePagerAdapter缓存

public class CostumAdapter extends FragmentStatePagerAdapter { 

     public CostumAdapter(FragmentManager fm) { 
      super(fm); 

     } 

     @Override 
     public Fragment getItem(int position) { 
      System.out.println("POSICION: "+position); 
      Bundle bundle = new Bundle(); 
      FragmentBebidas fragmentBebidas = new FragmentBebidas(); 
      bundle.putInt("ID", Integer.parseInt(listMenu.get(position).getId())); 
      fragmentBebidas.setArguments(bundle); 

      return fragmentBebidas; 

     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      return menuTabs.get(position).toString(); 
     } 

     @Override 
     public int getCount() { 
      return menuTabs.size(); 
     } 

     @Override 
     public int getItemPosition(Object object) { 
      return POSITION_NONE; 
     } 

     @Override 
     public void destroyItem(ViewGroup container, int position, Object object) { 
      super.destroyItem(container, position, object); 

     } 
    } 

enter image description here

enter image description here

+0

不清楚你想要什么! –

+0

这是所选位置的后选项卡被缓存,如果我返回,选项卡数据将不再起作用。我只想更新当前选项卡选定选项卡的数据,但仅限于其他选项卡的数据,所以每个选项卡都带有susecientemente @ Kishore Jethava –

回答

0

有一个变通此,您可以使用FragmentManager来保留由ViewPager创建的片段。

扩展这个abstract

public abstract class StateSaveFragmentAdapter extends FragmentPagerAdapter { 

    public FragmentManager fragmentManager; 

    public StateSaveFragmentAdapter(FragmentManager fragmentManager) { 
     super(fragmentManager); 
     this.fragmentManager = fragmentManager; 
    } 

    public abstract int viewPagerId(); 

    public Fragment getSavedFragment(int position) { 
     return fragmentManager.findFragmentByTag(frameworkFragmentName(viewPagerId(), 
       getItemId(position))); 
    } 

    private String frameworkFragmentName(int viewId, long id) { 
     return "android:switcher:" + viewId + ":" + id; 
    } 
} 

适配器应该是这个样子:

public class CustomAdapter extends StateSaveFragmentAdapter { 

    public ProjectDetailFragmentAdapter(FragmentManager fragmentManager) { 
     super(fragmentManager); 
    } 

    @Override 
    public int viewPagerId() { 
    // your viewpager id 
     return R.id.pager; 
    } 

    @Override 
    public Fragment getItem(int position) { 
    // check if fragment was saved 
     if (getSavedFragment(position) != null) 
     return getSavedFragment(position); 

    // if save fragment was null, continue with normal implementation   
    FragmentBebidas fragmentBebidas = new FragmentBebidas(); 
     bundle.putInt("ID", Integer.parseInt(listMenu.get(position).getId())); 
     fragmentBebidas.setArguments(bundle); 
    return fragmentBebidas; 
    } 

    @Override 
    public int getCount() { 
    // your implementation 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     // your implementation 
    } 
} 
+0

我会马上证明它@Rakeeb Rajbhandari –

+0

但它不想保存以前的状态,我只想要选中的片段之一,可能并且与第二个图片有混淆,我只是想加载选中的其他片段而已,我只是想加载选中的页面并且所以每一个只有选定的一个。我解释 –

+0

行为仍然是一样的。 –

0

@Isa M I假设你需要刷新这是对用户可见的特定片段的数据。为此,您可以使用方法setUserVisibleHint()。在这个布尔变量中,您可以知道片段是否对用户可见。 如果是在那个块中做你需要的代码。

+0

您有代码的一个片段,从你的想法来解决,这是非常感谢 –

+0

下面是代码: @Override 公共无效setUserVisibleHint(布尔isVisibleToUser){ 超。setUserVisibleHint(isVisibleToUser); if(isVisibleToUser){ //在这里做你的工作 } } – Aditi