2017-04-20 5 views
1

Lets auf diesem Bild sehen:Reusing tauchte Fragment

fragmentA->FragmentB

In Android Tutorial jedes Mal, wenn FragmentA mit FragmentB neue Instanz FragmentB ersetzt wird erstellt.

Lets nächsten Fall FragmentA-FragmentB dann zurück (drücken) zu FragmentA suchen und wieder zu FragmentB gehen. Vielleicht, wenn alte Instanz von FragmentB immer noch am Leben wäre besser verwenden Sie es (nur Daten aktualisieren) statt neue Instanz erstellen? Gibt es einen einfachen Weg das zu tun?

Antwort

0

Verwenden Sie die Methode fragmentTransaction.show, um das vorhandene Fragment erneut zu verwenden.

Verwenden Sie die folgende Methode, um das Fragment zu wechseln, es wird das Fragment angezeigt, wenn es bereits hinzugefügt wurde.

public void switchFragment (Fragment oldFragment, Fragment newFragment, int frameId) { 

    boolean addFragment = true; 

    FragmentManager fragmentManager = getFragmentManager(); 
    String tag = newFragment.getArguments().getString (BaseFragment.TAG); 
    Fragment fragment = fragmentManager.findFragmentByTag (tag); 

    // Check if fragment is already added 
    if (fragment != null && fragment.isAdded()) { 
     addFragment = false; 
    } 

    // Hide previous fragment 
    String oldFragmentTag = oldFragment.getArguments().getString (BaseFragment.TAG); 

    if (!tag.equals (oldFragmentTag)) { 
     FragmentTransaction hideTransaction = fragmentManager.beginTransaction(); 
     Fragment fragment1 = fragmentManager.findFragmentByTag (oldFragmentTag); 
     hideTransaction.hide (fragment1); 
     hideTransaction.commit(); 
    } 

    // Add new fragment and show it 
    FragmentTransaction addTransaction = fragmentManager.beginTransaction(); 

    if (addFragment) { 
     addTransaction.add (frameId, newFragment, tag); 
     addTransaction.addToBackStack (tag); 
    } 
    else { 
     newFragment = fragmentManager.findFragmentByTag (tag); 
    } 

    addTransaction.show (newFragment); 

    addTransaction.commit(); 
} 
0

Sie einfach Singleton für Ihr Fragment verwenden können,

public class FragmentGoogleMap extends Fragment implements OnMapReadyCallback { 

MapView mapView; 
GoogleMap googleMap; 

private static FragmentGoogleMap instance = null; 

private FragmentGoogleMap() { 
} 

public static FragmentGoogleMap getInstance(){ 
    if(instance == null){ 
     instance = new FragmentGoogleMap(); 
    } 
    return instance; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

frome Aktivität können Sie Instanz

private FragmentGoogleMap fragmentGoogleMap; 
private FragmentManager fragmentManager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    fragmentManager = getSupportFragmentManager(); 
    fragmentGoogleMap = FragmentGoogleMap.getInstance(); 
    fragmentManager.beginTransaction().replace(R.id.fragment_map_container,fragmentGoogleMap).commit(); 

} 
bekommen
Verwandte Themen