2017-12-16 6 views
0

Ich versuche, ein Fragment von einem ViewPager zu ersetzen, und ich kenne nicht die beste Möglichkeit, das zu tun.Ersetzen Sie Fragment in ViewPager, altes Fragment entfernt nicht

Um das Fragment ich diesen Code verwenden, um zu ändern:

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

Wo R.id.root_frame ist der Behälter des i ersetzen Fragment und es ist ein FrameLayout.

Das Problem ist, dass wenn ich die App ausführen, das Fragment gut läuft, aber es ist über das alte Fragment, das entfernt werden sollte.

Eine bessere Lösung, das zu tun?

des Adapters ViewPager ist ein 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; 
    } 
} 

Antwort

0

Zuerst meed Fragmente mit einzigartigen Tags hinzuzufügen. Wann immer Sie das alte Fragment ersetzen möchten, müssen Sie das Fragment mit diesem eindeutigen Fragment-Tag entfernen.

Fragment entfernen;

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

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

Ok, aber ... wenn ich das Fragment entfernen? –

+0

Wenn ich das Fragment vor dem Ersetzen entferne, ist das resultierende Fragment leer –

0

GELÖST

Wenn Sie einen Hintergrund in das neue Fragment Layout gesetzt und klickbare = "true" es läuft richtig!