gpt4 book ai didi

android - 如何根据每个项目中显示的数据更改列表项的背景颜色?

转载 作者:行者123 更新时间:2023-11-29 18:00:51 24 4
gpt4 key购买 nike

我在 SQLite 中有一个订单列表,其状态各不相同:已分配、已加载、已交付。我希望这些订单中的每一个在列表中显示时都具有不同的彩色背景。到目前为止,我还没有找到执行此操作的好方法。

我发现有很多关于如何根据位置更改列表项背景颜色的讨论,但没有一个是基于数据内容的。我还发现了很多关于如何更改用于突出显示所选项目的颜色的讨论。这些对我没有帮助。

我想出的解决问题的唯一方法是在适配器创建后遍历整个列表,并为每个项目设置背景。这是笨拙和浪费的。我希望有一种更有效的方法可以在从游标创建列表时更改适配器中的背景。

我相信有更好的方法。我对 Android 太陌生了,还不了解它。


我非常感谢到目前为止的回复。我正在尽最大努力将它们合并,但我仍然没有成功。这是我刚刚尝试的方法,基于我得到的答案和我所做的研究。

public class OrderListAdapter extends SimpleCursorAdapter {

private static final String TAG = "SimpleCursorAdapter";
Context _context = null;
int layoutResourceId = 0;

public OrderListAdapter(Context context, int layout, Cursor c,
String[] from, int[] to, int flags) {
super(context, layout, c, from, to, flags);
_context = context;
}

public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
String tag = TAG + ".getView()";
Log.d(tag,"in getView()");

if (view == null) {
LayoutInflater inflater = ((Activity)_context).getLayoutInflater();
view = inflater.inflate(R.layout.fragment_order_list_row, null);
}
setRowColor(view);
return view;
}

private void setRowColor(View view) {
String tag = TAG + ".setRowColor()";
Cursor cursor = getCursor();
int col = cursor
.getColumnIndex(DBContract.DeliveryOrderTable.ENROUTE_FLAG);
String enroute_flag = cursor.getString(col);
Log.d(tag, "enroute_flag = [" + enroute_flag + "]");
col = cursor
.getColumnIndex(DBContract.DeliveryOrderTable.DELIVERED_DATETIME);
String deliveredDateStr = cursor.getString(col);
Log.d(tag, "deliveredDateStr = [" + deliveredDateStr + "]");
int bgColorId = 0;
if (!deliveredDateStr.equals("")) {
bgColorId = R.color.bg_status_delivered_color;
Log.d(tag, "Setting to delivered color");
} else if (enroute_flag.startsWith("T") || enroute_flag.startsWith("Y")) {
Log.d(tag, "Setting to enroute color");
bgColorId = R.color.bg_status_enroute_color;
} else {
Log.d(tag, "Setting to assigned color");
bgColorId = R.color.bg_status_assigned_color;
}
view.setBackgroundColor(_context.getResources().getColor(bgColorId));
}
}

不幸的是,这不起作用。如果我不调用 super.getView(),我最终会在字段中没有数据,显然,因为我没有明确地进行传输,但我想我可以修改返回的 View 。

我的痕迹显示我正在读取数据,但背景颜色没有改变。

看来我要更改的 View 是 LinearLayout,但更改背景颜色似乎不起作用。

明白了!确保使所有 subview 的背景透明。

最佳答案

如果您正在为 ListView 使用任何自定义适配器,那么您将有一个方法 getView(),在返回之前调用一个方法,并根据您要更改的 View (正在返回)和数据传递行的颜色。

public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View view = convertView;
if (view == null) {
LayoutInflater vi = (LayoutInflater) _c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = vi.inflate(R.layout.list_item_var, null);
}

TextView varView = (TextView) view.findViewById(R.id.var);
TextView valueView = (TextView) view.findViewById(R.id.value);

VarDetails var = _data.get(position);
setRowColor(view, var.getVar());
varView.setText(var.var);
valueView.setText("Value: " + var.value);

return view;
}
private void setRowColor(View view, String var) {
if("assigned".equalsIgnoreCase(var)){
view.setBackgroundColor(Color.rgb(255,0,0));
}else if("loaded".equalsIgnoreCase(var)){
view.setBackgroundColor(Color.rgb(0,255,0));
}else if("delivered".equalsIgnoreCase(var)){
view.setBackgroundColor(Color.rgb(0,0,255));
}
}

请根据您的数据类型更改方法。

关于android - 如何根据每个项目中显示的数据更改列表项的背景颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16176398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com