无法在后台更新listview项目颜色

时间:2016-03-11 14:11:05

标签: android listview sharedpreferences

当我尝试根据我的数据库更新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);

        }


    }
}

1 个答案:

答案 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模式。