Sto avendo difficoltà a capire il modo corretto di navigare attraverso i frammenti senza un cercapersone e sto avendo problemi durante la configurazione cambia per l'orientamento dello schermo. Sto usando Show/Hide sui frammenti per renderli visibili e funzionali, ma mi chiedo se invece dovrei usare Detach/Attach. Sto anche avendo problemi ad aggiungere cose allo stack e penso che sia anche dovuto all'uso di show/hide. È meglio usare Attach/detatch o c'è un modo per ignorare ciò che fa il pulsante Indietro per farlo mostrare/nascondere l'ultimo/frammento corrente.Frammenti detatch/Ricollegare VS Mostra/Nascondi
il comportamento: Ho un frammento di mappa e un frammento lista insieme a pochi altri. tutto si avvia correttamente e funziona inizialmente con modifiche di orientamento. Quando navigo nella visualizzazione elenco, viene compilato correttamente, ma in seguito all'orientamento l'elenco viene ridisposto senza i dati in esso contenuti. Anche la vista mappa viene ridisegnata ed è visibile dietro l'indicatore del titolo del cercapersone. Se qualcuno potrebbe per favore mi punto nella giusta direzione per risolvere questo sarebbe fantastico. Sospetto che sia causato dal modo in cui sto mostrando e nascondendo i frammenti.
Qui è dove creo i Frammenti e aggiungerli al gestore frammento. Ho anche mostrato dove mostro/nascondo i frammenti.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map_frags);
mapViewContainer = LayoutInflater.from(this)
.inflate(R.layout.map, null);
setupFragments();
showFragment(0);
}
public void setListData(String name) {
bName = name;
showFragment(1);
}
private void setupFragments() {
final FragmentManager fm = getSupportFragmentManager();
final FragmentTransaction ft = fm.beginTransaction();
mFragment1 = fm.findFragmentByTag("f1");
if (mFragment1 == null) {
mFragment1 = new MenuFragment();
ft.add(mFragment1, "f1");
ft.hide(mFragment1);
}
mMapFragment = (MapFragment) getSupportFragmentManager()
.findFragmentByTag(MapFragment.TAG);
if (mMapFragment == null) {
mMapFragment = MapFragment.newInstance(0);
ft.add(R.id.fragment_container, mMapFragment, MapFragment.TAG);
}
ft.hide(mMapFragment);
myListFragment = (ListFrag) getSupportFragmentManager()
.findFragmentByTag(ListFrag.TAG);
if (myListFragment == null) {
myListFragment = new ListFrag();
ft.add(R.id.fragment_container, myListFragment, ListFrag.TAG);
}
ft.hide(myListFragment);
frag = (frag) getSupportFragmentManager().findFragmentByTag(
frag.TAG);
if (frag == null) {
bacFrag = new frag();
ft.add(R.id.fragment_container, frag, frag.TAG);
}
ft.hide(bacFrag);
ft.commit();
}
public void showFragment(int fragIn) {
final FragmentTransaction ft = getSupportFragmentManager()
.beginTransaction();
ft.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out);
if (mVisible != null) {
if (mVisible == mListFragment) {
ft.remove(mListFragment);
} else {
ft.hide(mVisible);
}
}
switch (fragIn) {
case 0:
ft.show(mMapFragment);
ft.commit();
mVisible = mMapFragment;
break;
case 1:
mListFragment = (ListFragmentDisplay) getSupportFragmentManager()
.findFragmentByTag(ListFragmentDisplay.TAG);
Toast.makeText(this, "startListFrag", Toast.LENGTH_LONG).show();
if (mListFragment == null) {
mListFragment = new ListFragmentDisplay();
ft.add(R.id.fragment_container, mListFragment,
ListFragmentDisplay.TAG);
}
ft.show(mListFragment).commit();
mVisible = mListFragment;
break;
case 2:
ft.show(myfragment).commit();
mVisible = myfragment;
break;
case 3:
ft.show(frag).commit();
mVisible = frag;
break;
}
}
se si desidera interrompere la propria attività dal riavvio sulla modifica dell'orientamento, è possibile aggiungere android: configChanges = "orientation | keyboardHidden" nel manifest. – Faizan
Scollega/Collega libererà le risorse, mentre nascondere/mostrare non lo farà. – Faizan