我有一个列表视图我想通过每隔5秒将每个列表项的背景颜色从透明切换为红色来进行操作。这是我在自定义BaseAdapter
中的getView方法的代码:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if(convertView == null){
viewHolder = new ViewHolder();
// store my view in view holder here
convertView.setTag(viewHolder);
}
else{
viewHolder = (ViewHolder)convertView.getTag();
}
// How do I manipulate this so that the background colour toggles
// between TRANSPARENT and RED every 5 seconds ?
convertView.setBackgroundColor(Color.RED);
return convertView;
}
我要做的是使用提供定期执行的Timer
来切换每个列表元素的背景颜色。但究竟需要如何实施呢?或者是否有更优化的方法来实现相同的结果?
答案 0 :(得分:0)
来自docs:
new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
}
public void onFinish() {
mTextField.setText("done!");
}
}.start();
您可以在CountDownTimer
内为您创建的每一行开始此ListView
。
答案 1 :(得分:0)
您可以创建一个背景Thread
(以避免在存在巨大的ListItem麻烦的情况下阻止主要用户Thread
阻止),您可以在其中创建定期Timer
和一段时间完成后,您可以查看所有ListView
项并更改背景颜色:listView.getChildAt(position).setBackgroundColor(color);
以下是一个例子:
CountDownTimer remainingTimeCounter = new CountDownTimer(futureInMillis, 1000) {
public void onTick(long millisUntilFinished) {
}
public void onFinish() {
// TODO: restart counter
futureInMillis = newTime(); // set the same futureInMillis to make it periodic
this.start();
listView.getChildAt(i).setBackgroundColor(color);
}
}.start();