讓我們看看在這樣的畫面:每當FragmentA
替換創建的FragmentB
FragmentB
新實例時重用彈出片段
在Android的教程。
讓我們看下一個案例FragmentA
到FragmentB
然後返回(按)到FragmentA
並再次去FragmentB
。也許如果舊的實例FragmentB
仍然活着會更好地使用它(只更新數據)而不是創建新的實例?有沒有簡單的方法來做到這一點?
讓我們看看在這樣的畫面:每當FragmentA
替換創建的FragmentB
FragmentB
新實例時重用彈出片段
在Android的教程。
讓我們看下一個案例FragmentA
到FragmentB
然後返回(按)到FragmentA
並再次去FragmentB
。也許如果舊的實例FragmentB
仍然活着會更好地使用它(只更新數據)而不是創建新的實例?有沒有簡單的方法來做到這一點?
嘗試使用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();
}
您可以使用簡單的辛格爾頓爲您片段,
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();
}