Fragmento se superpone a veces al cambiar las pestañas
Tengo un diseño de dos paneles con mis botones a la izquierda. Cuando se pulsa un botón, se muestra su fragmento correspondiente a la derecha. A veces los fragmentos se superponen, pero esto es una cuestión intermitente. No puedo replicar todo el tiempo, pero sucede
public void onClick(View v) { switch (v.getId()) { case R.id.imageButtonSettingsManageBooks: SettingsManageBooksFragment mbFragment = new SettingsManageBooksFragment(); getFragmentManager().beginTransaction().replace(R.id.setting_detail_container2, mbFragment).addToBackStack(null).commit(); mImgFragmentTitle.setImageResource(R.drawable.manage_my_books); this.getSupportFragmentManager().executePendingTransactions(); break; case R.id.imageButtonSettingsPurchaseHistory: SettingsPurchaseHistoryFragment phFragment = new SettingsPurchaseHistoryFragment(); getFragmentManager().beginTransaction().replace(R.id.setting_detail_container2, phFragment).commit(); mImgFragmentTitle.setImageResource(R.drawable.purchase_history); this.getSupportFragmentManager().executePendingTransactions(); break; case R.id.imageButtonSettingsAudio: SettingsAudioFragment aFragment = new SettingsAudioFragment(); getFragmentManager().beginTransaction().replace(R.id.setting_detail_container2, aFragment).commit(); mImgFragmentTitle.setImageResource(R.drawable.audio); this.getSupportFragmentManager().executePendingTransactions(); break; case R.id.imageButtonSettingsRestore: SettingsRestoreFragment rFragment = new SettingsRestoreFragment(); getFragmentManager().beginTransaction().replace(R.id.setting_detail_container2, rFragment).commit(); mImgFragmentTitle.setImageResource(R.drawable.restore); this.getSupportFragmentManager().executePendingTransactions(); break; case R.id.imageButtonSettingsCopyright: SettingsCopyrightFragment cFragment = new SettingsCopyrightFragment(); getFragmentManager().beginTransaction().replace(R.id.setting_detail_container2, cFragment).commit(); mImgFragmentTitle.setImageResource(R.drawable.copyright); this.getSupportFragmentManager().executePendingTransactions(); break; case R.id.imageButtonSettingsAbout: SettingsAboutFragment abFragment = new SettingsAboutFragment(); getFragmentManager().beginTransaction().replace(R.id.setting_detail_container2, abFragment).commit(); mImgFragmentTitle.setImageResource(R.drawable.about); this.getSupportFragmentManager().executePendingTransactions(); break;
Parece que estoy reemplazando cada fragmento con un nuevo fragmento que podría estar causando la superposición. ¿Hay alguna manera de borrar todos los fragmentos antes de comprometer uno nuevo?
- Mover fragmento de Android a un contenedor diferente No se puede cambiar el identificador de contenedor de fragmento
- ¿Cómo volver al fragmento anterior de la actividad?
- Listener para el ciclo de vida de los fragmentos
- Map-Fragment (v2) Nullpointer (tema bajo Lollipop?)
- ¿Hay un método como setResult () en fragmento?
- Determine el estado vacío del fragmento backstack en android
- Programaticamente volver al fragmento anterior en el backstack
- OnViewCreated - lugar equivocado para reemplazar el fragmento?
- ¿Cómo puedo saber que onCreateView ha sido llamado desde una clase externa?
- Mi aplicación se bloquea en modo horizontal
- Mostrar un RecyclerView en Fragmento
- Android: pestañas en la parte inferior con FragmentTabHost
- No se puede convertir de android.support.v4.app.Fragment a android.app.Fragment
Como se mencionó anteriormente por StackOverflowed esto es un problema intermitente. He encontrado una manera de arreglar esto escribiendo mi propio código para eliminar cualquier fragmento existente antes de comprometer uno nuevo. A continuación se muestra mi código:
fragmentManager = getFragmentManager(); ft = fragmentManager.beginTransaction(); mbFragment = new SettingsManageBooksFragment(); ft.replace(R.id.setting_detail_container2, mbFragment).commit(); mImgFragmentTitle.setImageResource(R.drawable.manage_my_books); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.imageButtonSettingsManageBooks: if (mPurchaseHistory == true) { ft.remove(phFragment); Log.d(TAG, "REMOVING PURCHASE HISTORY FRAG"); } else if (mAudio == true) { ft.remove(aFragment); Log.d(TAG, "REMOVING AUDIO FRAG"); } else if (mRestore == true) { ft.remove(rFragment); Log.d(TAG, "REMOVING RESTORE FRAG"); } else if (mCopyright == true) { ft.remove(cFragment); Log.d(TAG, "REMOVING COPYRIGHT FRAG"); } else if (mAbout == true) { ft.remove(abFragment); Log.d(TAG, "REMOVING ABOUT FRAG"); } ft = fragmentManager.beginTransaction(); mbFragment = new SettingsManageBooksFragment(); ft.replace(R.id.setting_detail_container2, mbFragment).commit(); mImgFragmentTitle.setImageResource(R.drawable.manage_my_books); mManageBooks = true; mPurchaseHistory = false; mAudio = false; mRestore = false; mCopyright = false; mAbout = false; break;