当我尝试根据我的数据库更新listview项目颜色时。我正在制作一个出勤应用程序,允许教师标记出席或缺席。当他们标记出勤时,根据标记出勤自动生成偏好文件,并将颜色更改为红色或绿色。这不是永久性的,因为我已经制作了一个按钮,它将检查偏好文件,如果他在场,则将其姓名改为绿色,否则红色的工作完美。但问题是我想要自动检查背景,不想一直按下按钮。 这是我的按钮代码,但我希望它在后台自动执行...
public void check(View view) {
//getting everything from table student
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MMM-yyyy");
String formattedDate = simpleDateFormat.format(new Date());
SharedPreferences data = getSharedPreferences(latestBranch + "(" + latestSection + ") - " + formattedDate, MODE_PRIVATE);
ArrayList<String> attend = new ArrayList<String>();
//making loop to get all students from studentslist
for (int x = 0; x < studentsList.size(); x++) {
attend.add(data.getString(studentsList.get(x).toString(), ""));
}
for (int y = 0;y < studentsList.size(); y++) {
if (attend.get(y).toString().equals("Present")) {
listView.getChildAt(y).setBackgroundColor(Color.GREEN);
} else if (attend.get(y).toString().equals("Absent")) {
listView.getChildAt(y).setBackgroundColor(Color.RED);
}
}
}
答案 0 :(得分:1)
使用ListView,您需要为列表编写自定义适配器。创建一个扩展ArrayAdapter.java的类。将您在listView中创建的自定义适配器的对象设置为其适配器。
覆盖
public View getView (int position, View convertView, ViewGroup parent)
当显示列表视图时调用此方法。您可以通过为每个位置设置视图的状态[文本,颜色,启用状态等属性]来重用视图。
您将数据(数据数组)与适配器相关联。当数据数组发生变化时,请在适配器的对象上调用notifyDataSetInvalidated()
。
在每个位置的getView方法(如上所述)中,根据数据阵列中该位置的颜色设置颜色。
代码:listView.getChildAt(y)
基于可见项目,有关详细信息,请参阅下面的其他问题链接。
Sometimes listView.getChildAt(int index) returns NULL (Android)
对于带有重写getView方法的自定义适配器,我建议你阅读android中的view-holder模式。