在GridView中添加徽章,以获取未读通知Android

时间:2016-09-19 07:21:19

标签: android mysql gridview notifications

您好我的自定义GridViewAdapter我有7个声音。

String[] description = new String[]{"test", "test1", "test2", "test3", "test4", "test5", "notification"};
int[] imageId = {
                R.mipmap.test,
                R.mipmap.test1,
                R.mipmap.test2,
                R.mipmap.test3,
                R.mipmap.test4,
                R.mipmap.test5,
                R.mipmap.notification,
        };

在我的数据库(mySQL db)中,我有一个通知表,我知道是否读取了一个通知。 所以我想在元素通知中加上一个徽章,通知数量未读。

网格元素的实际布局是:

<de.hdodenhof.circleimageview.CircleImageView xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/image"
    android:layout_gravity="center"
    android:layout_width="88dp"
    android:layout_height="88dp"
    android:layout_marginTop="5dp"
    android:layout_marginBottom="5dp"
    app:civ_border_width="2dp"
    app:civ_border_color="#FF000000"
    />
<TextView
    android:id="@+id/description"
    android:layout_gravity="center"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="15dp"
    android:layout_marginTop="5dp"
    android:layout_marginBottom="5dp"
    />

我相信如果我在rowLayout中添加一个TextView(如下所示)可以正常工作

<TextView
    android:id="@+id/unread"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:visibility="gone"
    />

但是使用这种方法,我会在所有元素中看到TextView。 如何在通知添加时将此textView仅用于一个元素并刷新数字?

我看到这篇文章https://github.com/leolin310148/ShortcutBadgerhttps://github.com/jgilfelt/android-viewbadger 但似乎已经弃用了。

我的Adapter是:

    public class GridViewDashboardAdapter extends BaseAdapter {
    public class Holder
    {
        TextView tv;
        TextView notification;
        ImageView img;
    }
    @Override
    public View getView(final int position, View convertView, ViewGroup parent)    {
        Holder holder = new Holder();
        View rowView;
        rowView = inflater.inflate(R.layout.dashboard_grid, null);
        holder.tv=(TextView) rowView.findViewById(R.id.description);
        holder.notification=(TextView) rowView.findViewById(R.id.description);
        holder.img=(de.hdodenhof.circleimageview.CircleImageView) rowView.findViewById(R.id.image);

        holder.tv.setText(result[position]);
        holder.img.setImageResource(imageId[position]);
         /* pseudo code */
        if(notificationUnread.size()>0){
            holder.notification.setVisibility(View.VISIBLE);
        }
    }
}

1 个答案:

答案 0 :(得分:2)

尝试替换

android:visible="gone"

android:visibility="gone"

getView中,您可以更改此处的可见性:

if (notificationUnread.size()>0){
    holder.notification.setVisibility(View.VISIBLE);
} else {
    holder.notification.setVisibility(View.GONE);
}