2

我一直在努力與建設功能在我的應用程序,允許用戶從Viewpager中刪除頁面/片段,我試圖將我的FragmentPageAdapter更改爲FragmentStatePageAdapter並覆蓋我的getItemPosition()return POSITION_NONE;然而這仍然不允許我來動態刪除片段時,我打電話fragments.remove(page);Android Viewpager如何動態刪除片段?

pageAdapter.notifyDataSetChanged(); 

有沒有人成功地這樣做過?看起來應該很簡單,但它沒有,下面是我的片段適配器,任何幫助將會很長的路要謝謝!

class MyPageAdapter extends FragmentStatePagerAdapter { 

    private List<Fragment> fragments; 

    public MyPageAdapter(FragmentManager fm, List<Fragment> fragments) { 

     super(fm); 

     this.fragments = fragments; 

    } 

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

    @Override 
    public Fragment getItem(int position) { 

     return this.fragments.get(position); 

    } 

    @Override 
    public float getPageWidth(int position) { 

     if (position == 0) { 
      return (0.75f); 
     } else { 
      return (1f); 
     } 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 

     MyFragment theFragment = (MyFragment) this.fragments.get(position); 

     return theFragment.returnTitle(); 

    } 

    @Override 
    public int getCount() { 

     return this.fragments.size(); 

    } 

} 

回答

2

使用傑克沃頓的ViewPagerIndicator。它還有一個具有這種功能的開源示例應用程序(從選項菜單中添加和刪除片段)。

要把它放到你的適配器:

public void setCount(int count) { 
    if (count > 0 && count <= 10) { 
     mCount = count; 
     notifyDataSetChanged(); 
    } 
} 

,這是添加頁面:

if (mAdapter.getCount() < 10) { 
     mAdapter.setCount(mAdapter.getCount() + 1); 
     mIndicator.notifyDataSetChanged(); 
    } 

這是怎麼刪除網頁:

if (mAdapter.getCount() > 1) { 
       mAdapter.setCount(mAdapter.getCount() - 1); 
       mIndicator.notifyDataSetChanged(); 
      } 
+2

我已經決定銷燬活動並重新啓動它,可能是實現我以後的最骯​​髒的可能方法,但它的工作原理和我的生活浪費了足夠的時間點大聲笑 –