没有使用自定义actionLayout为Action Bar菜单项调用OnOptionsItemSelected

时间:2015-06-03 10:41:34

标签: android xamarin android-actionbar

我尝试在操作栏中实施通知图标以显示通知计数。像

这样的东西

enter image description here

我已为其添加了自定义布局文件 NotificationIcon.xml

  <!-- Menu Item Image -->
  <ImageButton
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:padding="2dp"
      android:clickable="true"
      android:src="@drawable/notification" />

  <!-- Badge Count -->
  <TextView
      android:id="@+id/actionbar_notifcation_textview"
      android:layout_width="wrap_content"
      android:layout_height="20dp"
      android:minWidth="20dp"
      android:layout_alignParentRight="true"
      android:gravity="center_horizontal"
      android:background="@drawable/circle_green"
      android:fontFamily="sans-serif-black"
      android:textStyle="bold"
      android:text="0"
      android:textColor="#FFFFFF" />
</RelativeLayout>

在我的菜单中将其用作 main_activity_actions.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
  <item
        android:id="@+id/action_add"
        android:title="@string/AddTag"
        android:icon="@+drawable/ic_action_new"
        android:showAsAction="always" />
  <item
        android:id="@+id/notification_icon"
        android:title="@string/PendingJobs"
        android:actionLayout="@layout/notificationIcon"
        android:icon="@+drawable/notification"
        android:showAsAction="always" />
  <item
        android:id="@+id/gps_status_icon"
        android:title="@string/GPS"
        android:icon="@+drawable/gps_grey"
        android:showAsAction="always" />
</menu>

UI看起来很好,但没有为通知图标调用OnOptionsItemSelected。它适用于其他两个。 我确实google了这个链接:onOptionsItemSelected not getting called when using custom action view

我试图在我的主要活动中实现它:

public override bool OnCreateOptionsMenu(IMenu menu)
        {
            actionBarMenu = menu;
            MenuInflater.Inflate(Resource.Menu.main_activity_actions, menu);

            var notificationMenuItem = menu.FindItem(Resource.Id.notification_icon);
            notificationMenuItem.ActionView.Click += (sender, args) => {
                this.OnOptionsItemSelected(notificationMenuItem);
            };

            return base.OnCreateOptionsMenu(menu);
        }

但它对我不起作用。它永远不会触发click事件。 请帮忙。

3 个答案:

答案 0 :(得分:0)

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getSupportMenuInflater();

                inflater.inflate(R.menu.main_activity_actions, menu);

        final View notification_icon= menu.findItem(R.id.notification_icon).getActionView();


        notification_icon.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
// write ur code here
}

        });
        return super.onCreateOptionsMenu(menu);
    }

使用此代码......希望它有所帮助:)

答案 1 :(得分:0)

我遇到同样的问题并找到以下解决方案:

首先:我真的不知道为什么,但如果你删除了

android:clickable="true"

然后......然后你才得到点击事件!!!

第二:你必须设置监听器......

...    
item.getActionView().setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //Do Your Stuff.....
        }
});

可能有人可以解释为什么这是&#34; android:clickable&#34;事情......我强硬的标准值是真的??

答案 2 :(得分:0)

您已使ImageButton可单击,然后为menuItem的布局编写了clickListener。您可以观察到,如果在ImageButton外部但在MenuItem布局内部单击,则侦听器将起作用。原因很简单,ImageButton的clickListener无关,设置Clickable = true时定义此按钮是否对单击事件作出反应。只需将Clickable = false设置为简单,您的按钮将不会对其单击事件作出反应,最终您的整个布局将对您定义的clickListener作出反应,然后您的问题将得到解决。