Sto sviluppando un'applicazione che utilizza frammenti, la settimana scorsa il mio dispositivo di test ha preso l'aggiornamento di lolipop. Quando provo la mia app su un dispositivo lolipop, ho visto che il metodo di sostituzione di Fragment Transaction non funzionava correttamente.La sostituzione delle transazioni di Fragment su API-21 rimane
Funziona con confusione nella versione Lolipop sebbene tutto vada bene nella versione Kitkat.
Per spiegare la mia situazione, ho aggiunto alcune immagini.
--Primo schermo ---------------------------- KitKat ------------- ------------------------ Lollipop -------------
Come potete vedere, quando uso kitkat
, tutto bene, ma non appena uso la sostituzione della transazione frammento lolipop
funziona in modo confuso.
Ecco il mio codice pulsante;
mButtonOk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FeedbackFragment mFragmentFeedBack = new FeedbackFragment();
android.app.FragmentManager fm = getFragmentManager();
fm.executePendingTransactions();
android.app.FragmentTransaction fragmentTransaction = fm.beginTransaction();
if (mFragmentFeedBack.isVisible()) {
fragmentTransaction.hide(mFragmentFeedBack);
} else {
if (!mFragmentFeedBack.isAdded()) {
fragmentTransaction.replace(R.id.containerfragment, mFragmentFeedBack);
}
fragmentTransaction.show(mFragmentFeedBack);
}
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
});
ecco il mio xml;
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" tools:context=".MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="117dp" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/containerfragment">
</FrameLayout>
EDIT: versione Kitkat è in esecuzione su un tablet, ma ho provato la mia app sul telefono cellulare (versione KitKat) risultato è lo stesso. Nessun cambiamento.
Grazie.
hai fatto il check in tablet (con lecca-lecca) stessa app ?? –
Sì. agisce lo stesso. Durante il test del dispositivo versione lecca-lecca, il frammento sostituito rimane indietro. – salih
Hai detto "Ho visto che il metodo di sostituzione di Fragment Transaction non funzionava correttamente". Ma mi sembra che frammentTransaction.hide sia eseguito invece di replace(), a causa del codice if (mFragmentFeedBack.isVisible()). Pensi che sia possibile? In questo caso, controlla almeno KitKat. –