你如何被动地改变列表视图中单个项目的背景?

时间:2015-09-07 01:07:53

标签: android listview background android-calendar

我正在用listview中列出的时间表编写一段代码。目的是在一定时间之间更改列表视图中某个项目的背景。例如,当它的3:40时,显示3:00-4:00的项目将具有绿色背景,当它变为4:00时,背景将返回白色。关于如何做到这一点的任何想法?到目前为止,这是我的相关代码。

    final ListView schedule = (ListView) findViewById(R.id.schedule);
    String[] myKeys = getResources().getStringArray(R.array.friday_schedule);
    schedule.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myKeys));
    Calendar c = Calendar.getInstance();
    final int hour = c.get(Calendar.HOUR);
    if(hour<6&&hour>5)
    {
        schedule.item(0).setBackgroundColor(Color.CYAN);
    }

另外,作为参考,这是this的类似问题。然后告诉我是否忘记附上我的一些代码。谢谢!

1 个答案:

答案 0 :(得分:2)

考虑创建覆盖ArrayAdapter的{​​{1}}子类。 getView()会有这样的逻辑:

getView()

然后,在小时,请在适配器上调用... final ListView schedule = (ListView) findViewById(R.id.schedule); String[] myKeys = getResources().getStringArray(R.array.friday_schedule); schedule.setAdapter(new ScheduleAdapter(this, android.R.layout.simple_list_item_1, myKeys)); ... public static class ScheduleAdapter extends ArrayAdapter<String> { public ScheduleAdapter(Context context, int resource, String[] schedule) { super(context, resource, schedule); } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = super.getView(position, convertView, parent); // compare current clock hour to the hour this item represents boolean isCurrentHour = position == ... <your logic goes here> view.setBackgroundResource(isCurrentHour ? R.color.current_hour : R.color.normal_hour); return view; } } notifyDataSetChanged()将重新绘制颜色。

我将ListView显示为您ScheduleAdapter活动的内部类。