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