2014-08-28 84 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; 

希望它会帮助....如果您使用第一个解决方案,您还可以想出问题在您的新片段后面的片段仍然是可点击

。如果发生这种情况,只需使新片段的父视图可点击即可。