Android 抽屉开关未按预期工作(图标保持不变)

Android 抽屉开关未按预期工作(图标保持不变),android,navigation-drawer,drawertoggle,actionbardrawertoggle,Android,Navigation Drawer,Drawertoggle,Actionbardrawertoggle,我正在尝试在我的应用程序中实现ActionBarDrawerToggle,但我做不到。我已经实现了在我的工具栏中显示切换,但是图标总是一样的 这是抽屉关闭时的切换图标: 这是抽屉打开的时候: 如您所见,它不会从ic_抽屉变为后箭头。ic_抽屉从未显示 下面是我的活动: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCon

我正在尝试在我的应用程序中实现ActionBarDrawerToggle,但我做不到。我已经实现了在我的工具栏中显示切换,但是图标总是一样的

这是抽屉关闭时的切换图标:

这是抽屉打开的时候:

如您所见,它不会从ic_抽屉变为后箭头。ic_抽屉从未显示

下面是我的活动:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    initializeDrawer();
    populateDrawer();
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);
}

private void initializeDrawer() {
        tagTitles = getResources().getStringArray(R.array.item_names);
        icons = getResources().getStringArray(R.array.item_icons);
        dwLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        dwList = (ListView) findViewById(R.id.drawer_list);
        dwList.setOnItemClickListener(new DrawerItemClickListener());
        dwToggle = new ActionBarDrawerToggle(this, dwLayout, toolbar, R.string.drawer_open, R.string.drawer_close) {
            public void onDrawerClosed(View view) {
                getSupportActionBar().setTitle("pepe");
                invalidateOptionsMenu();
            }

            public void onDrawerOpened(View drawerView) {
                getSupportActionBar().setTitle("pop");
                invalidateOptionsMenu();
            }
        };
        dwLayout.setDrawerListener(dwToggle);
    }

    private void populateDrawer() {
        ArrayList<DrawerItem> dwItems = new ArrayList<>();
        for (int i = 0; i < tagTitles.length; i++) {
//ignore this; population is not properly working
            dwItems.add(new DrawerItem(tagTitles[i], Resources.getSystem().getIdentifier("abc_ic_menu_copy_mtrl_am_alpha.png", "drawable", getBaseContext().getPackageResourcePath())));
        }

        dwList.setAdapter(new NavigationDrawerAdapter(this, dwItems));
    }

@Override
public void onPostCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
    super.onPostCreate(savedInstanceState, persistentState);
    dwToggle.syncState();
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    if (dwToggle.onOptionsItemSelected(item)) {
        return true;
    }

    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    dwToggle.onConfigurationChanged(newConfig);
}

private class DrawerItemClickListener implements ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        selectItem(position);
    }
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar=(toolbar)findviewbyd(R.id.toolbar);
设置支持操作栏(工具栏);
初始化为rawer();
populateDrawer();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
}
private void initializeDrawer(){
tagTitles=getResources().getStringArray(R.array.item_名称);
icons=getResources().getStringArray(R.array.item_icons);
dwLayout=(抽屉布局)findViewById(R.id.抽屉布局);
dwList=(ListView)findViewById(R.id.drawer\u列表);
setOnItemClickListener(新的DroperItemClickListener());
dwToggle=newactionBarDrawerToggle(此、dwLayout、工具栏、R.string.drawer\u打开、R.string.drawer\u关闭){
公共无效onDrawerClosed(视图){
getSupportActionBar().setTitle(“pepe”);
无效操作菜单();
}
打开图纸上的公共空白(视图抽屉视图){
getSupportActionBar().setTitle(“pop”);
无效操作菜单();
}
};
dwLayout.setDrawerListener(dwToggle);
}
私有void populateDrawer(){
ArrayList dwItems=新的ArrayList();
对于(int i=0;i

谢谢

使用DroperLayout instace实现以下方法,在您的示例中是dwLayout。执行以下命令:

dwLayout.setDrawerListener(dwToggle);
加上这个

drawerLayout.post(new Runnable() {
    @Override
    public void run() {
        // To display hamburger icon in toolbar
        drawerToggle.syncState();
    }
});
或者你也可以这样做

@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
mDrawerToggle.syncState();
}

使用DroperLayout instance实现以下方法,在您的示例中是dwLayout。执行以下命令:

dwLayout.setDrawerListener(dwToggle);
加上这个

drawerLayout.post(new Runnable() {
    @Override
    public void run() {
        // To display hamburger icon in toolbar
        drawerToggle.syncState();
    }
});
或者你也可以这样做

@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
mDrawerToggle.syncState();
}

哎呀!我忘了将方法添加到主帖子-它已经在我的代码中。是的。。。它确实有用!但是仅仅为了更改dwToggle图标而启动线程是合适的吗?为什么需要
onPostCreate()
上的线程和
mDrawerToggle.syncState()
不起作用?如果起作用,可以加上一个。哈哈。。很高兴它成功了。n由于您正在实现ActionbarDrawerToggle,因此需要在其中使用runnable。请您提供更深入的解释,好吗?这只是好奇。无论何时你打开或关闭抽屉,活动都需要以某种方式得到通知。syncState()方法使其保持同步,并在抽屉打开或关闭时发送该信息。并设置指示器。它被称为汉堡图标/指示器。希望你明白我的意思。无法快速回复,因为我很忙,如果可以,请,。。做另外一件事,表明你的问题已经解决,这样其他人就可以阅读并得到答案。谢谢哎呀!我忘了将方法添加到主帖子-它已经在我的代码中。是的。。。它确实有用!但是仅仅为了更改dwToggle图标而启动线程是合适的吗?为什么需要
onPostCreate()
上的线程和
mDrawerToggle.syncState()
不起作用?如果起作用,可以加上一个。哈哈。。很高兴它成功了。n由于您正在实现ActionbarDrawerToggle,因此需要在其中使用runnable。请您提供更深入的解释,好吗?这只是好奇。无论何时你打开或关闭抽屉,活动都需要以某种方式得到通知。syncState()方法使其保持同步,并在抽屉打开或关闭时发送该信息。并设置指示器。它被称为汉堡图标/指示器。希望你明白我的意思。无法快速回复,因为我很忙,如果可以,请,。。做另外一件事,表明你的问题已经解决,这样其他人就可以阅读并得到答案。谢谢