我正在尝试根据其中的文本更改列表视图中每个单元格的颜色。这就是我目前填充listview的方式:
DBHelper db = new DBHelper(this);
List<HiveEquipment> heList = db.getEquipmentForHive(currentHiveId);
final ArrayAdapter<HiveEquipment> dataAdapter = new ArrayAdapter<HiveEquipment>(this,
android.R.layout.simple_list_item_1, heList);
final ListView equipmentList = (ListView) findViewById(R.id.listView);
runOnUiThread(new Runnable() {
@Override
public void run() {
equipmentList.setAdapter(dataAdapter);
}
});
所以我只想尝试一些事情,我尝试使用以下方法更改背景颜色:
list.getChildAt(0).setBackgroundColor(Color.BLACK);
这返回了一个空指针。所以我用以下方法检查了孩子的数量:
Log.d(&#34;试验&#34;&#34;&#34 + equipmentList.getChildCount());
但即使它在我的列表视图中显示一个项目,它也会返回0。
任何人都可以帮助我理解为什么这会返回0,以及如何选择每个单元格来改变背景颜色?
答案 0 :(得分:0)
在访问子视图对象之前,您需要确保填充listView(在UI中显示)。这意味着将创建每个子项视图。在您的情况下,我相信您在将适配器设置为listView后立即尝试获取子项,这就是getChildAt返回null的原因。
因此,使用您的方法,仅在创建列表视图后执行以下代码。
View listViewChildAt = listView.getChildAt(0);
listViewChildAt.setBackgroundColor(Color.BLUE);
其他最佳方法是创建自定义适配器并在getView中设置所需子视图的颜色
@Override
public View getView(int position, View contentView , ViewGroup parent)
{
String text = getItem(position);
View row = mContext.getLayoutInflater().inflate(android.R.layout.simple_list_item_1, null);
if(text.equalsIgnoreCase("yourText")){
row.setBackgroundColor(Color.BLUE);
}
return row;
}