我有一個工作正常的Android應用程序,但我發現了一個煩人的錯誤,我不知道還有什麼辦法來解決它。通過片段返回後的白色屏幕
我的應用程序有一個單獨的Activity(稱爲HomeActivity;還有,首選活動)和大量碎片。 HomeActivity管理使用此方法(在此thread,尤其是發現尋找到以下comment)更換每個片斷:
public void switchFragment(Fragment pFragment, String pTagFragment){
String backStateName = pTagFragment;
boolean fragmentPopped = mFragmentManager.popBackStackImmediate (backStateName, 0);
if (!fragmentPopped){ //fragment not in back stack, create it.
FragmentTransaction ft = mFragmentManager.beginTransaction();
ft.replace(R.id.content_frame, pFragment);
ft.addToBackStack(backStateName);
ft.commit();
}
}
要更換一個片段,我做的是以下幾點:
switchFragment(new FragmentEuskalmet(), FragmentEuskalmet.FRAGMENT_NAME);
這是問題所在:我瀏覽了幾個片段(比如說其中的3個片段)。然後,我想回去,所以我回推2次。當我到達堆棧中的最後一個時,顯示一個白色屏幕(即在碎片應該在的地方顯示白色)。奇怪的是,如果我長時間按住我的主頁按鈕來顯示最近的應用程序,並再次選擇我的應用程序,則片段將正確加載。
我假設在我的switchFragment
方法中可能存在某些內容,例如,它可能是與backStack有關的任何問題。一個重要的細節是我已經在每個片段中寫入了所謂的空構造函數。
有人能幫我一把嗎?如果有人要求,我可以提供更多的代碼片段。
編輯: 我認爲強制輸入我的SSS方法:
@Override
public void onBackPressed(){
invalidateOptionsMenu();
if(CURRENT_FRAGMENT != FragmentMapa.FRAGMENT_NAME){//"com.ingartek.bizkaimove.ui.FragmentMapa"){
mDrawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, mDrawerRightRelativeLayout);
}
if(mDrawer.isDrawerOpen(GravityCompat.START)){
mDrawer.closeDrawer(GravityCompat.START);
setToolbarSubtitle(mSubtitleAux);
}else{
setToolbarSubtitle(getString(R.string.app_name_subtitle));
if (getSupportFragmentManager().getBackStackEntryCount() == 1){
//finish();
showExitDialog();
}else {
super.onBackPressed();
popFragment();
}
}
}
我想我應該改寫這一部分:
}else {
super.onBackPressed();
popFragment();
}
解決方案: 作爲@Ajay潘迪亞建議,我離開onBackPressed()那樣:
@Override
public void onBackPressed(){
invalidateOptionsMenu();
if(CURRENT_FRAGMENT != FragmentMapa.FRAGMENT_NAME){//"com.ingartek.bizkaimove.ui.FragmentMapa"){
mDrawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, mDrawerRightRelativeLayout);
}
if(mDrawer.isDrawerOpen(GravityCompat.START)){
mDrawer.closeDrawer(GravityCompat.START);
setToolbarSubtitle(mSubtitleAux);
}else{
setToolbarSubtitle(getString(R.string.app_name_subtitle));
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
if (getSupportFragmentManager().getBackStackEntryCount() == 1){
//finish();
showExitDialog();
}else{
mFragmentManager.popBackStackImmediate();
}
} else {
super.onBackPressed();
}
}
}
你應該在這裏發表您的活動了解更多信息。白色屏幕顯示您添加到背面堆疊的所有碎片都被剪切 - >因此,您的活動中沒有視圖。 –