在菜单项中使用actionLayout时,未调用onOptionsItemSelected方法。是我遗漏了什么,还是Sherlock工具栏存在已知问题?
活动
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getSupportMenuInflater();
inflater.inflate(R.menu.article, menu);
super.onCreateOptionsMenu(menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Log.d(TAG, "onOptionsItemSelected()");
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
case R.id.menu_item_comment:
return true;
default:
return super.onOptionsItemSelected(item);
}
}
字符串
菜单
<item android:id="@+id/menu_item_comment"
android:showAsAction="ifRoom"
android:actionLayout="@layout/action_bar_comment_layout"/>
型
7条答案
按热度按时间jslywgbw1#
好吧,你必须在actionLayout上设置onClickList来接收回调。我是这样做的:
字符串
eivnm1vs2#
你必须添加自己的
OnClickListener
并显式调用onOptionsItemSelected
:字符串
P.S:不知道为什么它不工作的盒子。
wwwo4jvm3#
如果您正在为旧版本开发,则应使用MenuItemCompat. getViewView(menuItem);而不是item. getViewView();。
字符串
fhg3lkii4#
字符串
为我工作(代码在Kotlin中)
r8uurelv5#
字符串
此外,(这对我来说非常重要,所以其他答案不起作用)您需要禁用Action布局中所有视图的可单击选项(即action_bar_comment_layout.xml):
型
zz2j4svz6#
结合@Arun Kumar和@Luten的答案,下面的方法将使实现通用化。对于所有使用actionView的菜单项,我们setOnClickListener来调用onOptionsItemSelected(item)。这样我们就可以混合和匹配普通和actionLayout菜单项,而不必担心单独设置onClickListeners。
字符串
rn0zuynd7#
在修复这个问题之前,我必须解决几个问题。据我所知,与Kotlin最相关。
1.请确保从MainActivities onCreate调用它:
字符串
2.您的Activities onCreate不应实现persistentState:PersistableBundle?。
所以它应该看起来像这样:
型
而不是像这样
型