簡體   English   中英

3秒后更改ListView項的背景顏色

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM