2014-08-28 82 views
2

我遇到了替換實現導航抽屜的片段問題。片段替換問題

問題是佈局重疊,但它發生只有當我讓應用程序在很長一段時間的背景(我假設在活動後停止)。

這是我用來更改片段的代碼。我不是在的onStop方法 做任何事(我應該做的事情?)

@Override 
    public void onNavigationDrawerItemSelected(int position) { 
     if(lastPosition == position){ 
      return; 
     } 
     FragmentTransaction transaction = fragmentManager.beginTransaction(); 
     Fragment lastFragment = fragmentManager.findFragmentByTag(lastTag); 
     Fragment fragment; 
     if (lastFragment != null) { 
      transaction.hide(lastFragment); 
     } 

     switch (position) { 
      case 0: 
       lastTag = "miPerfil"; 
       lastPosition = 0; 
       fragment = fragmentManager.findFragmentByTag("miPerfil"); 
       if(fragment != null) { 
        transaction.remove(fragment); 
       } 
       transaction.add(R.id.container, MiPerfilFragment.newInstance(position + 1),"miPerfil"); 

       break; 
      case 1: 
       lastTag = "misReportes"; 
       lastPosition = 1; 
       fragment = fragmentManager.findFragmentByTag("misReportes"); 
       if(fragment != null) { 
        transaction.remove(fragment); 
       } 
       transaction.add(R.id.container, MisReportesFragment.newInstance(position + 1),"misReportes"); 

       break; 
      case 2: 
       lastTag = "mapFragment"; 
       lastPosition = 2; 
       fragment = fragmentManager.findFragmentByTag("mapFragment"); 
       if(fragment != null) { 
        transaction.show(fragment); 
       }else{ 
        transaction.add(R.id.container, MapFragment.newInstance(position + 1),"mapFragment"); 
       } 
       break; 
      case 3: 
       moveTaskToBack(true); 
       return; 
     } 
     transaction.addToBackStack(lastTag).commit(); 
    } 

感謝。

回答

4

有兩種解決方案,您可以嘗試克服重疊片段的問題。

嘗試(1)在xml文件中爲您的片段設置背景顏色。

,如果它不能正常工作,

試(2)通過編寫自己的代碼提交一個新的之前刪除任何現有的碎片修復此。

例如:

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; 

希望它會幫助....如果您使用第一個解決方案,您還可以想出問題在您的新片段後面的片段仍然是可點擊

。如果發生這種情況,只需使新片段的父視圖可點擊即可。