我有一个带有选项菜单的android应用程序,并且第一项是通过“ actionLayout”定义的:
menu.xml代码段:
<item
android:id="@+id/Cart"
android:title="Cart"
app:actionLayout="@layout/custom_action_item_layout"
app:showAsAction="always"/>
<item
android:id="@+id/settings"
android:icon="@drawable/ic_settings_white_24dp"
android:title="@string/settings"
app:showAsAction="ifRoom" />
custom_action_item_layout代码段:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
style="?attr/actionButtonStyle"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/cart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clipToPadding="false"
android:focusable="true"
android:clickable="true">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/ic_shopping_cart_white_24dp"/>
<TextView
android:id="@+id/cart_badge"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_gravity="right|end|top"
android:layout_marginEnd="-5dp"
android:layout_marginRight="-5dp"
android:layout_marginTop="3dp"
android:background="@drawable/badge_background"
android:gravity="center"
android:padding="1dp"
android:textColor="@android:color/white"
android:textSize="12sp"/>
</FrameLayout>
然后我设置菜单:
override fun onCreateOptionsMenu(menu_: Menu): Boolean {
menu = menu_
val inflater = menuInflater
inflater.inflate(R.menu.uppermenu, menu)
var cart = menu!!.findItem(R.id.Cart);
var actionView = getActionView(cart);
textCartItemCount = actionView.findViewById(R.id.cart_badge) as TextView
return true
}
但是,
override fun onOptionsItemSelected(item: MenuItem): Boolean { }
当我单击菜单项时从未调用。
我从2012年开始为Java查找sherlockactionbar的解决方案,但该解决方案不适用于:onOptionsItemSelected not called when using actionLayout (SherlockActionBar)
它似乎与项目的动作布局有关,没有它,它就运作良好。如何使onOptionsItemSelected工作?
override fun onCreateOptionsMenu(menu_: Menu): Boolean {
menu = menu_
menuInflater.inflate(R.menu.uppermenu, menu)
var cartMenuItem = menu!!.findItem(R.id.Cart)
cartMenuItem.actionView?.cart.setOnClickListener {
cartMenuItem.actionView?.cart_badge.text = "content update in the textview"
}
return true
}
以上代码段应为您执行onClick事件