碎片替换问题



我在片段替换实现导航抽屉时遇到问题。

问题是布局重叠,但只有当我让应用程序在后台停留很长一段时间时才会发生这种情况(在活动进入"停止"后,我会暂停)。

这是我用来更改片段的代码。我没有在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();
    }

谢谢。

有两种解决方案可以尝试克服重叠片段的问题。

尝试(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;

希望它能有所帮助。。。。

如果你使用第一个解决方案,你也可能会遇到新片段后面的片段仍然可以点击的问题。如果发生这种情况,只需使新片段的父视图可单击即可。。

最新更新