繁体   English   中英

自定义操作视图布局不响应菜单项调整器

[英]Custom Action View layout not responding to menu item lisetener

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

我在这里想念什么,有什么建议吗?

文档中

设置自定义侦听器以调用此菜单项。 在大多数情况下,使用onOptionsItemSelected(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的结果(我单击了两次图标):

LogCat

如您所见,它可以正常工作

请试试

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

改成

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM