Android 使用addToBackStack(null)时ActionBarDrawerToggle将消失

Android 使用addToBackStack(null)时ActionBarDrawerToggle将消失,android,android-fragments,actionbardrawertoggle,Android,Android Fragments,Actionbardrawertoggle,在selectItem()方法中,将.addToBackStack(null)添加到我的事务中似乎会破坏切换按钮(点击时会显示导航抽屉的按钮)。当加载片段时(通过单击导航抽屉中的相应项),它将完全消失。如果我将该行注释掉,切换按钮将保持不变,并且工作得非常好 我需要调用addToBackStack,因为我想让back按钮功能对这些片段起作用。为什么会导致这个问题 private class DrawerItemClickListener implements ListView.OnItemCli

在selectItem()方法中,将.addToBackStack(null)添加到我的事务中似乎会破坏切换按钮(点击时会显示导航抽屉的按钮)。当加载片段时(通过单击导航抽屉中的相应项),它将完全消失。如果我将该行注释掉,切换按钮将保持不变,并且工作得非常好

我需要调用addToBackStack,因为我想让back按钮功能对这些片段起作用。为什么会导致这个问题

private class DrawerItemClickListener implements ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView parent, View view, int position, long id) {
        Log.d(TAG, "Item " + position + " selected");
        selectItem(position);
    }
}

/** Swaps fragments in the main content view */
private void selectItem(int position) {
    // Create a new fragment and specify the planet to show based on position
    Fragment aboutFragment = new AboutFragment();
    FragmentManager fragmentManager = getSupportFragmentManager();
    Log.d(TAG, "selectItem() with position  " + position);

    switch(position) {
        case 0:
            fragmentManager.beginTransaction()
                    .replace(R.id.contributionsFragmentContainer, contributionsList)
                    //.addToBackStack(null)
                    .commit();
            Log.d(TAG, "contributionsListFragment committed");
            break;
        case 1:
            fragmentManager.beginTransaction()
                    .replace(R.id.contributionsFragmentContainer, aboutFragment)
                    //.addToBackStack(null)
                    .commit();
            Log.d(TAG, "aboutFragment committed");
            break;

    }

    // Highlight the selected item, update the title, and close the drawer
    mDrawerList.setItemChecked(position, true);
    setTitle(itemArray[position]);
    mDrawerLayout.closeDrawer(mDrawerList);
}

@Override
public void setTitle(CharSequence title) {
    if (title != null && getActionBar() != null) {
        getActionBar().setTitle(title);
    }
}

private void addDrawerItems() {
    itemArray = new String[] {"Home", "About", "Nearby", "Settings", "Feedback"};
    Log.d(TAG, "Adding to itemArray");
    mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, itemArray);
    mDrawerList.setAdapter(mAdapter);
    mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
}

private void setupDrawer() {
    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.drawer_open, R.string.drawer_close) {

        /** Called when a drawer has settled in a completely open state. */
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
        }

        /** Called when a drawer has settled in a completely closed state. */
        public void onDrawerClosed(View view) {
            super.onDrawerClosed(view);
            invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
        }
    };

    mDrawerToggle.setDrawerIndicatorEnabled(true);
    mDrawerLayout.setDrawerListener(mDrawerToggle);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTitle(R.string.title_activity_contributions);
    setContentView(R.layout.activity_contributions);
    Log.d("ContributionsActivity", "onCreate()");

    // Activity can call methods in the fragment by acquiring a reference to the Fragment from FragmentManager, using findFragmentById()
    contributionsList = (ContributionsListFragment) getSupportFragmentManager().findFragmentById(R.id.contributionsListFragment);

    //Set up navigation drawer
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    //getSupportActionBar().setHomeButtonEnabled(true);
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerList = (ListView) findViewById(R.id.drawer_list);
    addDrawerItems();
    setupDrawer();
    ...
}
私有类DrawerItemClickListener实现ListView.OnItemClickListener{
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
日志d(标签,“项目”+位置+“选定”);
选择项目(位置);
}
}
/**在主内容视图中交换片段*/
私有void selectItem(内部位置){
//创建一个新片段并根据位置指定要显示的行星
片段aboutFragment=新的aboutFragment();
FragmentManager FragmentManager=getSupportFragmentManager();
Log.d(标记“selectItem(),位置为“+position”);
开关(位置){
案例0:
fragmentManager.beginTransaction()
.替换(R.id.contributionsFragmentContainer,contributionsList)
//.addToBackStack(空)
.commit();
Log.d(标记“contributionsListFragment committed”);
打破
案例1:
fragmentManager.beginTransaction()
.更换(R.id.contributionsFragmentContainer,关于碎片)
//.addToBackStack(空)
.commit();
Log.d(标记“aboutFragment committed”);
打破
}
//突出显示所选项目,更新标题,然后关闭抽屉
mDrawerList.setItemChecked(位置,true);
setTitle(itemArray[位置]);
mDrawerLayout.closeDrawer(mDrawerList);
}
@凌驾
公共无效设置标题(字符序列标题){
if(title!=null&&getActionBar()!=null){
getActionBar().setTitle(标题);
}
}
私有void addDrawerItems(){
itemArray=新字符串[]{“主页”、“关于”、“附近”、“设置”、“反馈”};
d(标记“添加到itemArray”);
mAdapter=newArrayAdapter(这个,android.R.layout.simple\u list\u item\u 1,itemArray);
mDrawerList.setAdapter(mAdapter);
setOnItemClickListener(新的DrawerItemClickListener());
}
私有void setupDrawer(){
mDrawerToggle=newactionBarDrawerToggle(此,mDrawerLayout,R.string.drawer\u打开,R.string.drawer\u关闭){
/**当抽屉处于完全打开状态时调用*/
打开图纸上的公共空白(视图抽屉视图){
super.onDrawerOpened(抽屉视图);
InvalidateOptions SMenu();//创建对OnPrepareOptions SMenu()的调用
}
/**当抽屉处于完全关闭状态时调用*/
公共无效onDrawerClosed(视图){
super.onDrawerClosed(视图);
InvalidateOptions SMenu();//创建对OnPrepareOptions SMenu()的调用
}
};
mDrawerToggle.setDrawerIndicatorEnabled(true);
mDrawerLayout.setDrawerListener(mDrawerToggle);
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setTitle(R.string.title\u活动\u贡献);
setContentView(R.layout.activity_贡献);
Log.d(“贡献活动”,“onCreate()”);
//活动可以通过使用findFragmentById()从FragmentManager获取对片段的引用来调用片段中的方法
contributionsList=(ContributionsListFragment)getSupportFragmentManager().findFragmentById(R.id.ContributionsListFragment);
//设置导航抽屉
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//getSupportActionBar().setHomeButtonEnabled(true);
mDrawerLayout=(抽屉布局)findViewById(R.id.抽屉布局);
mDrawerList=(ListView)findViewById(R.id.drawer\u列表);
addDrawerItems();
setupDrawer();
...
}