Gridview 根据 Android 中的 SQLITE 状态高亮显示特定项目

Posted

技术标签:

【中文标题】Gridview 根据 Android 中的 SQLITE 状态高亮显示特定项目【英文标题】:Gridview highlight specific Item based on SQLITE status in Android 【发布时间】:2021-11-21 21:26:18 【问题描述】:

我有一个问题,我想设置高亮 Gridview 项目 当 SQLITE 的值状态等于 0 时。我有下面的查询 但我不知道从哪里开始以及如何突出显示 GridView 上的特定项目。

输出应该是这样的,突出显示的项目基于 SQLITE 上的状态,其值为0。有人知道我怎样才能实现突出显示的部分吗?对我很有用

InventoryListClass

    GridView gridView = (GridView) findViewById(R.id.gridView);
    list = new ArrayList<>();
    adapter = new InventoryListAdapter(this, R.layout.activity_inventory_items, list);
    gridView.setAdapter(adapter);


    try 
        Cursor cursor = sqLiteHelper.getData("SELECT id,hh_number,card_scanning_status FROM CgList");
        list.clear();
        while (cursor.moveToNext()) 
            int id = cursor.getInt(0);
            String hhNumber = cursor.getString(1);
            
            int status = cursor.getInt(2);
            if (status==0)
                //IF VALUE IS O IT IS HIGHLIGHTED 
            
            else 
                // IF VALUE IS 1 NOT HIGHLIGHTED
            
            list.add(new Inventory(hhNumber, id));
        
        adapter.notifyDataSetChanged();
    
    catch (Exception e)
        Log.d(TAG, "Error: "+ e);
    

InventoryListadapter 类 更新:我认为不是在 InventoryList 类下设置颜色,我认为突出显示应该在 getView 内部我尝试的是下面的代码 但它似乎是错误的 Attempt to invoke virtual method 'void android.view.View.setBackgroundColor(int)' on a null object reference

  @Override
public View getView(int position, View view, ViewGroup viewGroup) 
    View row = view;
    ViewHolder holder = new ViewHolder();

    if(row == null)
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = inflater.inflate(layout, null);
        holder.txtName = (TextView) row.findViewById(R.id.txtName);
        row.setTag(holder);
    
    else 
        holder = (ViewHolder) row.getTag();
    
    Inventory inventory = inventoryList.get(position);
    holder.txtPrice.setText("HH no: "+ inventory.getHHnumber());


    int status = inventory.getStatus();

    if (status==0)
        view.setBackgroundColor(Color.parseColor("#FF108714"));
        //here to set color
    
    
    return row;

【问题讨论】:

【参考方案1】:

int status = inventory.getStatus();

所以,假设你有一个状态设置器,那么你可以设置它:

try 
    Cursor cursor = sqLiteHelper.getData("SELECT id,hh_number,card_scanning_status FROM CgList");
    list.clear();
    while (cursor.moveToNext()) 
        int id = cursor.getInt(0);
        String hhNumber = cursor.getString(1);
        
        int status = cursor.getInt(2);
        Inventory inventory = new Inventory(hhNumber, id);
        inventory.setStatus(status);
        list.add(inventory);
    
    adapter.notifyDataSetChanged();

catch (Exception e)
    Log.d(TAG, "Error: "+ e);

尝试在空对象引用上调用虚拟方法“void android.view.View.setBackgroundColor(int)”

getView()view 参数可以为空,因此您使用了row 实例;但是这里你在view 上调用了setBackgroundColor(),而不是row,所以你需要将它改为:row.setBackgroundColor()

还要确保设置默认背景颜色以防状态值不为 0,因为当视图被回收时,您会发现突出显示和未突出显示的行之间有些混乱。

旁注:最佳实践使用 3-arg inflate() 方法:inflater.inflate(layout, viewGroup, false)

应用:

@Override
public View getView(int position, View view, ViewGroup viewGroup) 
    View row = view;
    ViewHolder holder = new ViewHolder();

    if(row == null)
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = inflater.inflate(layout, viewGroup, false);
        row.setTag(holder);
    
    else 
        holder = (ViewHolder) row.getTag();
    
    
    Inventory inventory = inventoryList.get(position);
    holder.txtPrice.setText("HH no: "+ inventory.getHHnumber());
    int status = inventory.getStatus();

    //here to set color
    if (status==0)
        row.setBackgroundColor(Color.parseColor("#FF108714"));

     else 
        // set the default color
    
    
    return row;

【讨论】:

以上是关于Gridview 根据 Android 中的 SQLITE 状态高亮显示特定项目的主要内容,如果未能解决你的问题,请参考以下文章

Android动态设定GridView的高度,固定column,实现高度自适应

如何实现android中横向滚动的gridView

GridView在android中的可扩展列表中

Android检测悬停在GridView中的按钮上

在android app中的gridview里面这么添加checkbox?

怎样动态设置GridView的宽和高(Android)