Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自定义操作视图布局不响应菜单项lisetener_Java_Android_Android Actionbar_Menuitem - Fatal编程技术网

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。