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,实现高度自适应