2017-12-16 20 views
0

私はViewPagerのフラグメントを置き換えようとしていますが、そのための最善の方法はわかりません。 R.id.root_frame iが置き換えられますフラグメントのコンテナであり、それはでframeLayoutあるViewPagerのフラグメントを置き換える、古いフラグメントが削除されない

Fragment productDetailFragment = RetarFragment.newInstance(null, null); 
    FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); 
    transaction.replace(R.id.root_frame, productDetailFragment).commit(); 

:私はこのコードを使用してフラグメントを変更するために

問題は、私がアプリケーションを実行すると、フラグメントは正常に実行されますが、それは削除する必要がある古いフラグメント上にあることです。

もっと良い解決策はありますか?

ViewPagerのアダプタを使用すると、独自のタグでフラグメントを追加するmeed FragmentStatePagerAdapter

public class SectionsPagerAdapter extends FragmentStatePagerAdapter implements Serializable{ 


    public static final int MENU_RETAR = 2; 
    public static final int MENU_BATALLA = 1; 
    int MENU_ACTUAL = MENU_BATALLA; 

    public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     // getItem is called to instantiate the fragment for the given page. 
     // Return a PlaceholderFragment (defined as a static inner class below). 
     switch (position){ 
      case 0: return new TimelineFragment(); 
      case 1: return new SearchFragment(); 
      case 2: 

       if(MENU_ACTUAL == MENU_RETAR){ 
        return new RetarFragment(); 
       }else{ 
        return new MenuBatallaFragment(); 
       } 

      case 3: return new NotificacionesFragment(); 
      case 4: return new PerfilFragment().newInstance(this); 
      default: 
       return new TimelineFragment(); 
     } 
    } 



    @Override 
    public int getItemPosition(Object object) { 

     return POSITION_NONE; 
    } 

    @Override 
    public int getCount() { 
     // Show 3 total pages. 
     return 5; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     switch (position) { 
      case 0: 
       return null; 
      case 1: 
       return null; 
      case 2: 
       return null; 
      case 3: 
       return null; 
      case 4: 
       return null; 
     } 
     return null; 
    } 
} 

答えて

0

ファーストです。その後、古いフラグメントを削除する場合は、そのフラグメントタグを使用してフラグメントを削除する必要があります。

フラグメントを削除します。

Fragment fragment =getSupportFragmentManager().findFragmentByTag(TAG); 

if(fragment != null) 
    getSupportFragmentManager().beginTransaction().remove(fragment).commit(); 
+0

いいえ、しかし...私はフラグメントを削除しますか? –

+0

置き換える前にフラグメントを削除すると、フラグメントが空になります –

0

は、あなたが新しいフラグメントのレイアウトに設定した場合背景とクリッカブル=「真」はそれが正しい実行さ

を解決しよう!

関連する問題