2012-11-19 57 views
10

"Tabs + Swipe"プロジェクトを使用していますが、断片を削除するのが難しいです。 FragmentStatePagerAdapterデータソースからデータベース Tab + ViewPager + FragmentStatePagerAdapter - フラグメントを削除するには?

  • 削除]タブから

    1. 削除]タブ
    2. アクションバーから削除]タブを:私はやっている

      手順。

    3. Support FragmentManagerを使用してフラグメントを削除します。

    問題: 私は削除を実行した後、何らかの理由で、私はまだ右にスクロールして、空の断片を見ることができます。私はそれを選択することはできません、それはちょうど戻ってバウンス。 フラグメントが削除されていないように見えますが、その位置は左からタグに変わります。

    マイアダプタ:

    public class SectionsPagerAdapter extends FragmentStatePagerAdapter { 
    
         public SectionsPagerAdapter(FragmentManager fm) { 
          super(fm); 
         } 
    
         @Override 
         public Fragment getItem(int position) { 
          Fragment fragment = new TabFragment(); 
    
          Bundle args = new Bundle(); 
          args.putInt(TabFragment.ARG_TAB_POSITION, position); 
          fragment.setArguments(args); 
    
          return fragment; 
         } 
    
         @Override 
         public int getCount() { 
          return tabsList.size(); 
         } 
    
         @Override 
         public CharSequence getPageTitle(int position) { 
          return tabsList.get(position).getTitle(); 
         } 
    
         @Override 
         public void destroyItem(ViewGroup container, int position, Object object) { 
          super.destroyItem(container, position, object); 
          FragmentManager manager = ((Fragment)object).getFragmentManager(); 
          android.support.v4.app.FragmentTransaction trans = manager.beginTransaction(); 
          trans.remove((Fragment)object); 
          trans.commit(); 
         } 
        } 
    

    (フラグメント内から呼び出された)私のremoveメソッド:

    public void removeTab() { 
          mTabTableHandler.deleteTab(tab.getId()); //db 
          tabsList.remove(tabPosition); //data source 
          actionBar.removeTabAt(tabPosition); // actionbar 
    
          getActivity().getSupportFragmentManager().beginTransaction().remove(this).commit(); // support fragmentmanager 
    
          tabsList = mTabTableHandler.query(); //requery db 
          mSectionsPagerAdapter.notifyDataSetChanged(); //notify adapter 
         } 
    

    は助けに感謝します!

  • 答えて

    4

    あなたはここで答えを見つけることができます - Remove Fragment Page from ViewPager in Android

    をあなたのコードで行方不明には、次のアダプタのメソッドの上書きされているものと思われる。そのような「奇妙な」解決策は、あなたが見つけることができる作業の理由

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

    説明リンクの質問への答えで私はあなたを提供しました。

    +0

    確かに奇妙な解決策です。ありがとう:) –

    0
    public void removeAllFragments(ViewGroup container) { 
         /* 
         * keep this line because section pager adapter has 
         * the bug to not delete the last fragment completely 
         * -> so we add an empty fragment 
         */ 
         int iStart = 0; 
    
         addFragment(new Fragment()); 
         Fragment frag; 
         int size = fragments.size(); 
         for (int iPos = iStart; iPos < size; iPos++) { 
          frag = getItem(iStart); 
          if (frag.isAdded()) { 
           destroyItem(container, iStart, frag); 
          } 
          fragments.remove(frag); 
          notifyDataSetChanged(); 
         } 
        } 
    
    関連する問題