[Android Tip] Toolbar onOptionsItemSelected 无响应

来源:互联网 发布:虚拟机10安装mac 编辑:程序博客网 时间:2024/05/19 16:33

使用Toolbar已经有一段时间了,今天遇到一个奇怪的问题,在某些机型上onOptionsItemSelected不会被调用。

@Overrideprotected void onCreate(Bundle savedInstanceState) {    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);    setSupportActionBar(toolbar);    ActionBar actionBar = getSupportActionBar();    if (null != actionBar) {        actionBar.setHomeButtonEnabled(true);        actionBar.setDisplayHomeAsUpEnabled(true);    }}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {    switch (item.getItemId()) {        case android.R.id.home:            onBackPressed();        default:            break;    }    return super.onOptionsItemSelected(item);}

如上代码在某些机型上会在ActionBar显示返回箭头,但是点击却无法调用onOptionsItemSelected方法。

Google了一下找到了一个解决办法,用Toolbar自带的setNavigationOnClickListener方法来代替onOptionsItemSelected:

@Overrideprotected void onCreate(Bundle savedInstanceState) {    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);    setSupportActionBar(toolbar);    ActionBar actionBar = getSupportActionBar();    if (null != actionBar) {        actionBar.setHomeButtonEnabled(true);        actionBar.setDisplayHomeAsUpEnabled(true);    }    toolbar.setNavigationOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            onBackPressed();        }    });}

这样,返回按钮就可以正常响应了。


Google过程中的相关问题:

  • Android Toolbar Not Calling onOptionsItemSelected From Fragments On Backstack

  • AppCompat v7 Toolbar onOptionsItemSelected not called

  • Appcompat Toolbar back button functionality on certain older phones has ‘issues’

0 0
原创粉丝点击