工具栏项目(带计数覆盖的通知铃声)不响应单击

问题描述 投票:0回答:1

我的工具栏上有通知铃图标,其中包含通知计数文本。它按预期工作,但当通知计数为零时,单击响铃图标不起作用。我认为这是因为操作布局显示了通知铃声的计数,但同时我认为铃声图标应该接受 onclick 事件。我知道这是我想念的东西,但我能够找出代码中断的地方。请帮帮我。

菜单项

   <item android:id="@+id/notificationBell"
        android:title=""
        android:icon="@drawable/notification"
        app:actionLayout="@layout/menuitem_notification_count"
        android:visible="true"
        app:showAsAction="always">
    </item>

操作布局 - menuitem_notification_count

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    style="?attr/actionButtonStyle"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:clipToPadding="false"
    android:focusable="true">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:src="@drawable/notification"/>

    <TextView
        android:id="@+id/cart_badge"
        android:layout_width="22dp"
        android:layout_height="22dp"
        android:layout_gravity="end|top"
        android:layout_marginEnd="-10dp"
        android:layout_marginTop="1dp"
        android:padding="2dp"
        android:background="@drawable/notification_count_background"
        android:textAlignment="center"
        android:gravity="center"
        android:textColor="@android:color/white"
        android:textSize="12sp"/>

</FrameLayout>

创建选项菜单

 @Override
    public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.menu_notification, menu);
        MenuItem notificationBell = menu.findItem(R.id.notificationBell);
        textNotificationCount = notificationBell.getActionView().findViewById(R.id.cart_badge);
        Typeface fontFace = ResourcesCompat.getFont(getActivity(), R.font.roboto_medium_numbers);
        textNotificationCount.setTypeface(fontFace);
        notificationCount = getNotificationCount();
        int checkCount = Integer.parseInt(notificationCount);
        Log.d(TAG, "run:  Notification Count = " + notificationCount);
        notificationBell.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem menuItem) {
                if (checkCount==0){
                    // THIS TOAST AND LOG NEVER SHOWS 
                    Log.d(TAG, "run:  Notification Count Is 0");
                    Toast.makeText(getActivity(), "No New Notifications.", Toast.LENGTH_SHORT).show();
                }

                return false;
            }
        });
        if (checkCount == 0) {
            if (textNotificationCount.getVisibility() != View.GONE) {
                textNotificationCount.setVisibility(View.GONE);
            }
        } else if (checkCount > 99) {
            //textNotificationCount.setText(String.valueOf(Math.min(notificationCount, 99))+"+");
            textNotificationCount.setText("99+");
            if (textNotificationCount.getVisibility() != View.VISIBLE) {
                textNotificationCount.setVisibility(View.VISIBLE);
            }
        } else {
            textNotificationCount.setText(notificationCount);
            if (textNotificationCount.getVisibility() != View.VISIBLE) {
                textNotificationCount.setVisibility(View.VISIBLE);
            }
        }

        textNotificationCount.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // ON CLICK WORKS WHEN COUNT IS NOT ZERO
            }
        });

    }
java android onclicklistener
1个回答
0
投票

我已经用

MaterialToolbar
解决了同样的问题一段时间了。

根据 copyprogramming.com 上的这篇文章,某些工具栏实现存在一个已知问题。

对我有用的解决方案是在布局视图上手动设置 OnClickListener:

val toolbar = view.findViewById<MaterialToolbar>(R.id.the_toolbar)
val actionView = toolbar.menu
    .findItem(R.id.notifications_menu_item).actionView
actionView!!.setOnClickListener { view ->
    // Do something
}
© www.soinside.com 2019 - 2024. All rights reserved.