簡體   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