Java 自定义操作视图布局不响应菜单项lisetener
我使用Java 自定义操作视图布局不响应菜单项lisetener,java,android,android-actionbar,menuitem,Java,Android,Android Actionbar,Menuitem,我使用MenuItemCompatJava创建了一个自定义动作视图布局,代码如下所示: @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); MenuItem shoppingCartitem = menu.findItem(R.id.my_action_item_id);
MenuItemCompat
Java创建了一个自定义动作视图布局,代码如下所示:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
MenuItem shoppingCartitem = menu.findItem(R.id.my_action_item_id);
shoppingCartitem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
Log.v("MyAPP", "Listener called");
return true;
}
});
MenuItemCompat.setActionView(shoppingCartitem, R.layout.my_custom_action_view_layout);
return super.onCreateOptionsMenu(menu);
}
menu_main.xml如下所示:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myapp="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">
<item
android:id="@+id/my_action_item_id"
android:icon="@drawable/ic_shopping_cart_white_24dp"
android:orderInCategory="9999"
android:title="@string/menu"
myapp:showAsAction="always" />
</menu>
我这里缺少什么,有什么建议吗?请尝试
MenuItem shoppingCartitem=menu.findItem(R.id.my\u action\u item\u id)
改为
MenuItem shoppingCartitem=(MenuItem)findViewById(R.id.my\u action\u item\u id)
从:
为调用此菜单项设置自定义侦听器。在大多数情况下,使用OnOptions ItemSelected(MenuItem)或onContextItemSelected(MenuItem)更高效、更容易
因此,您可以简单地覆盖onOptionsItemSelected
回调,这更容易
顺便说一句,你的代码似乎是对的,但它没有任何作用。你有没有试过做类似于Log.v(“MyAPP”,“Listener called”)代码>在里面
编辑:
我写了这段代码:
MainActivity.java:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
MenuItem item = menu.findItem(R.id.my_action_item_id);
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
Log.v("MyApp", "Inside listener");
return true;
}
});
MenuItemCompat.setActionView(item, R.layout.main_activity);
return super.onCreateOptionsMenu(menu);
}
}
main_menu.xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myapp="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">
<item
android:id="@+id/my_action_item_id"
android:icon="@drawable/ic_launcher"
android:orderInCategory="9999"
android:title="Menu"
myapp:showAsAction="always" />
</menu>
这是LogCat的结果(我点击了两次图标):
正如您所看到的,它可以正常工作我已经用调试器检查过,单击该项时调试不会在侦听器中停止,我也尝试过按您所说的那样放置日志。thanx,我这里只有一个问题,在MenuItemCompat.setActionView(item,R.layout.main\u activity)行中;你不认为你应该使用一些其他定制的布局而不是活动布局吗?是的,你绝对应该!但我创建了一个快速示例应用程序,我重新使用了相同的布局以节省时间:)这对我来说仍然不起作用。你有什么想法或建议,我可以在这里重新检查哪些内容?我正在测试JellyBean(4.1.2)API级别16。