2017-04-20 67 views
1

讓我們看看在這樣的畫面:每當FragmentA替換創建的FragmentBFragmentB新實例時重用彈出片段

fragmentA->FragmentB

在Android的教程。

讓我們看下一個案例FragmentAFragmentB然後返回(按)到FragmentA並再次去FragmentB。也許如果舊的實例FragmentB仍然活着會更好地使用它(只更新數據)而不是創建新的實例?有沒有簡單的方法來做到這一點?

回答

0

嘗試使用fragmentTransaction.show方法重新使用現有片段。

使用以下方法切換片段,如果已經添加,則會顯示片段。

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

您可以使用簡單的辛格爾頓爲您片段,

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); 
} 

弗羅姆活動,你可以得到實例

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(); 

}