[英]Change background color of ListView item after 3 seconds
我在ArrayList<Item>
有一個“已看到”或“未看到”的ArrayList<Item>
。 如果沒有看到它們,我將在CustomArrayAdapter
更改ListView
項的背景顏色,如下所示:
if(item.is_seen == null || item.is_seen == 0) {
row.setBackgroundResource(R.color.yellow);
} else {
row.setBackgroundResource(R.color.transparent);
}
現在,我要在頁面上停留3秒鍾后將所有項目的背景設置為透明。
我已經嘗試做這樣的事情:
mScheduledExecutor.schedule(new Runnable() {
@Override
public void run() {
for(int i=0; i<mItems.size(); i++) {
final Item n = mItems.get(i);
if(n.is_seen == null || n.is_seen == 0) {
// update value in db
int isSeen = 1;
updateItem(n._id, isSeen);
// change the color of backgrounds
View view = listViewItem.getChildAt(i);
if(view != null) {
view.setBackgroundResource(R.color.red);
}
}
}
更新數據庫中的值可以,但是其余的則不行。 但我想避免重新加載數據。 我只需要改變顏色。
我沒有錯誤,它什么也沒做。
我到處尋找答案,但沒有找到答案。 我從一開始就錯了嗎? 我想實現的目標是否可能?
我預先感謝您能給我的所有幫助。
無需像您一樣更改視圖的顏色,
// change the color of backgrounds
View view = listViewItem.getChildAt(i);
if(view != null) {
view.setBackgroundResource(R.color.red);
}
(上面的代碼將不起作用,因為視圖是在ListAdapter中回收的)更新用於構建列表的DATA-向要傳遞到ListAdapter的類中添加一個屬性,然后從列表中獲取該實例並更新該屬性,您已經擁有需要更新的位置,因此很容易。 然后,在列表上調用notifyDataSetChanged()。 如果您沒有從列表中添加/刪除項目,它將不會重新繪制列表,但是它將為您更新正確的視圖。 這是唯一的方法-絕對不會在已經繪制列表之后到達對應於列表中特定元素的視圖。 唯一的方法是使用notifyDataSetChanged(),然后是refreshDrawableState()刷新/重繪列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.