片段替换问题

时间:2014-08-28 13:45:58

标签: android android-fragments

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

问题是布局重叠,但只有当我将应用程序放在后台很长一段时间才会发生(我在活动进入停止状态后认为是这样)。

这是我用来更改片段的代码。我没有在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 个答案:

答案 0 :(得分: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;
希望它会有所帮助......

如果您使用第一个解决方案您可能还会遇到新片段背后的片段仍然可以点击的问题。如果发生这种情况,那么只需将新片段的父视图设为可点击..