gpt4 book ai didi

android - 显示箭头而不是 Material 设计版本的汉堡包图标。为什么 onPostCreate 中的 syncState 不起作用?

转载 作者:搜寻专家 更新时间:2023-11-01 08:40:54 25 4
gpt4 key购买 nike

我细化了Android Studio的Navigation Drawer Activity项目模板,使用Toolbarv7.app.ActionBarDrawerToggleNavigationView代替NavigationDrawerFragment(和 layout/fragment_navigation_drawer.xml)。

根据 Google's guidancereference ,我设置了 ActionBarDrawerToggle。我做到了 1) 在 onCreate 中实例化,2) 在 onPostCreate 中调用 syncState,以及 3) 调用 onConfigurationChanged 和 onOptionsItemSelected。

它几乎完美地工作,除了一件事:汉堡包图标显示为箭头

可以在 StackOverFlow 上找到类似的问题,尤其是 this question .但问题是关于使用旧的 R.drawable.ic_drawer 作为汉堡包的方式,这不是 Material 设计(5.0 Lollipop 之前)版本。而且这个问题没有答案,提问者评论说他已经解决了,但没有说明任何解决方案。

过了一段时间,无意中找到了解决办法。它有点脏。就是在onCreate中调用syncState。因为似乎出于某种原因,我的应用程序中没有调用 onPostCreate。实际上,这个肮脏的解决方案用于 an answer to the other problem .

但是the official reference在 onPostCreate 中调用 syncState。为什么它不起作用?为什么我的应用程序不调用 onPostCreate?这应该是不显示汉堡包图标(而是显示箭头)的主要原因。

下面是我的代码:

@Override
protected void onCreate(Bundle savedInstanceState) {

...

toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);

drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
drawerToggle = new ActionBarDrawerToggle(
this,
drawerLayout,
R.string.navigation_drawer_open,
R.string.navigation_drawer_close
) {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);

invalidateOptionsMenu(); // calls onPrepareOptionsMenu()
}

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

invalidateOptionsMenu(); // calls onPrepareOptionsMenu()
}
};
drawerLayout.setDrawerListener(drawerToggle);

navigationView = (NavigationView) findViewById(R.id.navigation_view);
navigationView.setNavigationItemSelectedListener(this);

drawerToggle.syncState(); // calling this here is somewhat a dirty solution
}

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

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

@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (drawerToggle.onOptionsItemSelected(item)) {
return true;
}

...

}

最佳答案

这里是PostCreate:

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

应该是这样的:

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

onPostCreate有两种类型:

  1. Activity's onPostCreate有两个参数。
  2. AppCompatActivity's onPostCreate用一个参数。

当你在 Android Studio 上覆盖一个方法时,你应该错误地选择了前者。

关于android - 显示箭头而不是 Material 设计版本的汉堡包图标。为什么 onPostCreate 中的 syncState 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32787036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com