自定义操作视图布局不响应菜单项lisetener

时间:2016-02-11 09:37:48

标签: java android android-actionbar menuitem

我使用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>

我在这里缺少什么,有什么建议吗?

2 个答案:

答案 0 :(得分:1)

来自documentation

  

设置自定义侦听器以调用此菜单项。在大多数情况下,使用onOptionsItemSelected(MenuItem)或onContextItemSelected(MenuItem)更有效,更容易。

因此,您可以简单地覆盖vw回调,这更容易。

顺便说一下,你的代码似乎是正确的,但它没有做任何事情。您是否尝试在其中执行类似onOptionsItemSelected的操作?

编辑:

我写了这段代码:

MainActivity.java:

Log.v("MyAPP", "Listener called");

main_menu.xml:

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);
    }

}

这是LogCat的结果(我点击了两次图标):

LogCat

你可以看到它没有问题

答案 1 :(得分:-1)

请尝试

  

MenuItem shoppingCartitem = menu.findItem(R.id.my_action_item_id);

更改为

  

MenuItem shoppingCartitem =(MenuItem)findViewById(R.id.my_action_item_id);