Android 抽屉开关未按预期工作(图标保持不变)
我正在尝试在我的应用程序中实现ActionBarDrawerToggle,但我做不到。我已经实现了在我的工具栏中显示切换,但是图标总是一样的 这是抽屉关闭时的切换图标: 这是抽屉打开的时候: 如您所见,它不会从ic_抽屉变为后箭头。ic_抽屉从未显示 下面是我的活动:Android 抽屉开关未按预期工作(图标保持不变),android,navigation-drawer,drawertoggle,actionbardrawertoggle,Android,Navigation Drawer,Drawertoggle,Actionbardrawertoggle,我正在尝试在我的应用程序中实现ActionBarDrawerToggle,但我做不到。我已经实现了在我的工具栏中显示切换,但是图标总是一样的 这是抽屉关闭时的切换图标: 这是抽屉打开的时候: 如您所见,它不会从ic_抽屉变为后箭头。ic_抽屉从未显示 下面是我的活动: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCon
@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()方法使其保持同步,并在抽屉打开或关闭时发送该信息。并设置指示器。它被称为汉堡图标/指示器。希望你明白我的意思。无法快速回复,因为我很忙,如果可以,请,。。做另外一件事,表明你的问题已经解决,这样其他人就可以阅读并得到答案。谢谢