91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

淺析:ListView的動態刷新問題

發布時間:2020-07-16 12:26:45 來源:網絡 閱讀:242 作者:天涯花生 欄目:移動開發

也許很多開發的朋友,尤其是Android初學者,在動態刷新ListView時,使用notifyDataSetChanged并沒有起到作用。有時會被困擾得很痛苦。

 

其實,在使用notifyDataSetChanged過程中,還是有細節需要注意的。舉個例子:

 

我的ListView使用的數據源是來自ArrayList。通常我們的做法是創建一個已經有我們想要提供給ListView的數據的ArrayList,例如:

1 ArrayList<Integer> list  = new ArrayList<Interger>;

2 list.add(1);

 

這里我們的list已經是指向了一個堆內存上了。接著我們想要改變list中的數據,而這個時候,就需要注意了,舉個例子:我們在代碼中有另外一個ArrayList叫做newlist,它是使用下面代碼創建出來的:

1 ArrayList<Integer> newlist  = new ArrayList<Interger>;

2 list.add(2);

 

這個時候,newlist指向的是一個和list指向不同的堆內存,這個時候,我們直接用list = newlist來把newlist的數據交給list,在這里,實際上只是把list的指向改變了,讓它也指向newlist指向的那個內存。那么這個時候我們再調用notifyDataSetChanged這個方法來通知listview更新數據就起不了任何作用了,原因很簡單,就是list的指向已經改變,而調用notifyDataSetChanged會去檢查原來list指向的數據是否變化,但是這時的list已經不是原來的list了,所以它無法判斷,只能不作出響應了。那么,這個問題的解決方法是直接在原來的list上面更改數據,可以使用下面的代碼來操作:

1 list.clear();

2 list.addAll(newlist);

3 adapter.notifyDataSetChanged();

 

這樣,list的指向就不會改變,它還是指向原來那塊內存,這樣調用notifyDataSetChanged()就可以起作用了。

 

總結:在這里的重點就是要注意在開始時傳給ListViewlist指向不能被改變,需要從始至終指向同一個內存,這樣調用notifyDataSetChanged后就能夠檢測到list的數據變化,從而觸發ListView的重新繪制了!另外,我在開發完APP都會用一些APP在線自動化測試工具進行測試:www.ineice.com


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

三门峡市| 阳泉市| 娱乐| 高安市| 新津县| 江山市| 卢湾区| 文成县| 巨野县| 庄浪县| 西华县| 句容市| 兴文县| 清水河县| 京山县| 屏东市| 邯郸市| 凤城市| 延长县| 威信县| 盐津县| 酒泉市| 红原县| 岢岚县| 望奎县| 墨竹工卡县| 武义县| 太仆寺旗| 新竹县| 景谷| 凤庆县| 遂川县| 汪清县| 彝良县| 忻州市| 乐都县| 南漳县| 黄龙县| 汾阳市| 宁乡县| 榆林市|