【问题标题】:Gridview highlight specific Item based on SQLITE status in AndroidGridview 根据 Android 中的 SQLITE 状态高亮显示特定项目
【发布时间】: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;
}

【问题讨论】:

    标签: java android android-adapter android-gridview


    【解决方案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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-18
      • 1970-01-01
      • 2021-05-30
      • 1970-01-01
      相关资源
      最近更新 更多