Android 导航抽屉带视图寻呼机,导致碎片重叠

Android 导航抽屉带视图寻呼机,导致碎片重叠,android,android-fragments,android-viewpager,navigation-drawer,Android,Android Fragments,Android Viewpager,Navigation Drawer,我在活动中有导航抽屉和查看寻呼机。 问题在于屏幕重叠。当我点击导航抽屉中的另一个项目时,它会切换到相应的屏幕,但视图寻呼机保持不变。在视图分页器getItem()中,我将使用fragment.newInstance(int index)调用一个片段。我尝试在视图页面中更改getItem()方法,以使用与nav抽屉相同的代码并替换当前片段,但是这会给我“java.lang.IllegalStateException:无法更改片段的容器ID”。我试图通过删除片段并提交更改来删除项目的ID。它没有修复

我在活动中有导航抽屉和查看寻呼机。 问题在于屏幕重叠。当我点击导航抽屉中的另一个项目时,它会切换到相应的屏幕,但视图寻呼机保持不变。在视图分页器getItem()中,我将使用fragment.newInstance(int index)调用一个片段。我尝试在视图页面中更改getItem()方法,以使用与nav抽屉相同的代码并替换当前片段,但是这会给我“java.lang.IllegalStateException:无法更改片段的容器ID”。我试图通过删除片段并提交更改来删除项目的ID。它没有修复错误。 如有任何建议或帮助,将不胜感激

public class MainActivity extends FragmentActivity {
private String[] titles;
private ListView drawerList;
private DrawerLayout drawerLayout;
private ActionBarDrawerToggle drawerToggle;
private int currentPosition = 0;
private ShareActionProvider shareActionProvider;`

MyPagerAdapter myPagerAdapter;
ViewPager pager;


private class DrawerItemClickListener implements      ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,    long id) {
        //code to run when the item gets clicked
        selectItem(position);
    }
 }

;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    titles = getResources().getStringArray(R.array.options);
    drawerList = (ListView) findViewById(R.id.drawer);
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);


    myPagerAdapter = new MyPagerAdapter(this.getSupportFragmentManager());
    //find view pager
    pager = (ViewPager) findViewById(R.id.viewPager);
    //set view pager adapter
    pager.setAdapter(myPagerAdapter);

    //item user clicks on is highlighted
    //with simple_list_item_activated_1
    drawerList.setAdapter(new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_activated_1, titles));
    drawerList.setOnItemClickListener(new DrawerItemClickListener());
    //if mainactivity is newly created,
    //use selectItem() to display HomeFragment
    if (savedInstanceState != null) {
        currentPosition = savedInstanceState.getInt("position");
        setActionBarTitle(currentPosition);
    } else {
        selectItem(0);
    }

    //create the actionbarToggle
    drawerToggle = new ActionBarDrawerToggle(this, drawerLayout,
            R.string.open_drawer, R.string.close_drawer) {
        //called when a drawer has settleed in a completely closed state

        @Override
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            invalidateOptionsMenu();
        }

        @Override
        public void onDrawerClosed(View drawerView) {
            super.onDrawerClosed(drawerView);
            invalidateOptionsMenu();
        }
    };
    drawerLayout.setDrawerListener(drawerToggle);
    getActionBar().setDisplayHomeAsUpEnabled(true);
    getActionBar().setHomeButtonEnabled(true);

    getSupportFragmentManager().addOnBackStackChangedListener(
            new FragmentManager.OnBackStackChangedListener() {
                @Override
                public void onBackStackChanged() {
                    FragmentManager fragMan = getSupportFragmentManager();
                    Fragment fragment = fragMan.findFragmentById(R.id.content_frame);
                    if (fragment instanceof HomeFragment) {
                        currentPosition = 0;
                    }
                    if (fragment instanceof EducationFragment) {
                        currentPosition = 1;
                    }
                    if (fragment instanceof TechnicalSkillsFragment) {
                        currentPosition = 2;
                    }
                    if (fragment instanceof WorkExpFragment) {
                        currentPosition = 3;
                    }
                    setActionBarTitle(currentPosition);
                    drawerList.setItemChecked(currentPosition, true);
                }
            }
    );
}




private Fragment selectItem(int position) {
    //currentPosition for savedInstanceState
    currentPosition = position;
    Fragment fragment = null;

    android.support.v4.app.FragmentManager fragmentManager =   getSupportFragmentManager();
    android.support.v4.app.FragmentTransaction ft = fragmentManager.beginTransaction();
    if(fragment !=null){
        ft.remove(fragment).commit();
        fragmentManager.executePendingTransactions();
    }

    switch (position) {
        case 1:
            fragment = new EducationFragment();
            break;
        case 2:
            fragment = new TechnicalSkillsFragment();
            break;
        case 3:
            fragment = new WorkExpFragment();
            break;
        default:
            fragment = new HomeFragment();
            break;
    }


    ft.replace(R.id.content_frame, fragment);
    ft.addToBackStack(null);
    ft.commit();


    //set title and close the drawer
    if (drawerLayout.isDrawerOpen(drawerList)) {
        setActionBarTitle(position);
        drawerLayout.closeDrawer(drawerList);
    }
    return fragment;
}
  public class MyPagerAdapter extends FragmentPagerAdapter {
    public MyPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public android.support.v4.app.Fragment getItem(int position) {
        return selectItem(position);
    }

    @Override
    public int getCount() {
        return 4;
    }
public类MainActivity扩展了FragmentActivity{
私有字符串[]标题;
私有列表视图抽屉列表;
私人抽屉布局;
私人诉讼律师事务所;
私有int currentPosition=0;
私有ShareActionProvider ShareActionProvider`
MyPagerAdapter MyPagerAdapter;
查看寻呼机;
私有类DrawerItemClickListener实现ListView.OnItemClickListener{
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
//单击项目时要运行的代码
选择项目(位置);
}
}
;
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
titles=getResources().getStringArray(R.array.options);
抽屉列表=(列表视图)findViewById(R.id.drawer);
抽屉布局=(抽屉布局)findViewById(R.id.抽屉布局);
myPagerAdapter=新的myPagerAdapter(this.getSupportFragmentManager());
//查找视图寻呼机
pager=(ViewPager)findViewById(R.id.ViewPager);
//设置视图寻呼机适配器
寻呼机设置适配器(myPagerAdapter);
//用户单击的项目将突出显示
//简单列表项激活时1
抽屉列表setAdapter(新阵列适配器)(此,
android.R.layout.simple_list_item_activated_1,titles));
setOnItemClickListener(新的DroperItemClickListener());
//如果mainactivity是新创建的,
//使用selectItem()显示HomeFragment
如果(savedInstanceState!=null){
currentPosition=savedInstanceState.getInt(“位置”);
setActionBarTitle(当前位置);
}否则{
选择项目(0);
}
//创建actionbarToggle
抽屉切换=新操作BarDrawerToggle(此为抽屉布局,
R.string.打开抽屉,R.string.关闭抽屉){
//当抽屉处于完全关闭状态时调用
@凌驾
打开图纸上的公共空白(视图抽屉视图){
super.onDrawerOpened(抽屉视图);
无效操作菜单();
}
@凌驾
图纸上的公共空白已关闭(视图抽屉视图){
super.onDrawerClosed(抽屉视图);
无效操作菜单();
}
};
抽屉布局。设置抽屉链接器(抽屉切换);
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
getSupportFragmentManager().AddOnBackbackChangedListener(
新建FragmentManager.onBackbackChangedListener(){
@凌驾
BackbackChanged()上的公共无效{
FragmentManager fragMan=getSupportFragmentManager();
Fragment fragMan.findFragmentById(R.id.content\u frame);
if(HomeFragment的片段实例){
currentPosition=0;
}
if(EducationFragment的片段实例){
当前位置=1;
}
if(TechnicalSkillsFragment的片段实例){
当前位置=2;
}
if(WorkExpFragment的片段实例){
当前位置=3;
}
setActionBarTitle(当前位置);
抽屉列表setItemChecked(currentPosition,true);
}
}
);
}
私有片段selectItem(int位置){
//savedInstanceState的当前位置
当前位置=位置;
片段=空;
android.support.v4.app.FragmentManager FragmentManager=getSupportFragmentManager();
android.support.v4.app.FragmentTransaction ft=fragmentManager.beginTransaction();
if(片段!=null){
ft.remove(fragment.commit();
fragmentManager.executePendingTransactions();
}
开关(位置){
案例1:
fragment=新的EducationFragment();
打破
案例2:
fragment=新技术killsFragment();
打破
案例3:
fragment=新的WorkExpFragment();
打破
违约:
fragment=新的HomeFragment();
打破
}
ft.replace(R.id.content\u frame,fragment);
ft.addToBackStack(空);
ft.commit();
//设置标题并关闭抽屉
if(抽屉布局isDrawerOpen(抽屉列表)){
setActionBarTitle(位置);
抽屉布局。封闭抽屉(抽屉列表);
}
返回片段;
}
公共类MyPagerAdapter扩展了FragmentPagerAdapter{
公共MyPagerAdapter(碎片管理器fm){
超级(fm);
}
@凌驾
public android.support.v4.app.Fragment getItem(int位置){
返回选择项(位置);
}
@凌驾
public int getCount(){
返回4;
}

A
FragmentTransaction
仅处理
Fragment
s及其
View
s。您的
ViewPager
显然是在
MainActivity
的布局中定义的,因此它不会被事务替换。一个选项是将
ViewPager
放在您加载的
Fragment