中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

ListView 單條刷新方法實踐及原理解析

發布時間:2020-08-11 20:44:46 來源:網絡 閱讀:383 作者:yangxiaoming123 欄目:開發技術

對于使用listView配合adapter進行刷新的方法大家都不陌生,先刷新adapter里的數據,然后調用notifydatasetchange通知listView刷新界面。

方法雖然簡單,但這里面涉及到一個效率的問題,調用notifydatasetchange其實會導致adpter的getView方法被多次調用 (畫面上能顯示多少就會被調用多少次),如果是很明確的知道只更新了list中的某一個項的數據(比如用戶點擊list某一項后更新該項的顯示狀態,或者 后臺回調更新list某一項,等等),應該盡量避免getView被無辜的多次調用,特別是當后臺線程特別多,回調的頻率特別高,并且界面的布局優化得不是特別好的時候,使用notityDataSetChaned()方法來更新界面就會顯得列表卡頓,用戶體驗不佳

下面我們來介紹一下如何對listView進行單條刷新:

首先我們看一下adapter的getView方法,我們要進行單條刷新就要手動調用這個方法。

public View getView(int position, View convertView, ViewGroup parent)

那么這三個參數是如何確定的呢,第三個參數很好確定,就是你的listview。

為了確定另外兩個參數position和converView,這里介紹幾個lisView的新方法:

getFirstVisiblePosition(),該方法獲取當前狀態下list的第一個可見item的position。

getLastVisiblePosition(),該方法獲取當前狀態下list的最后一個可見item的position。

getItemAtPosition(int position),該方法返回當前狀態下position位置上listView的convertView

ps:這里的convertView是復用的,也就是說不管position的值是多大(這個要看你整個list有多大),converView的個數應該始終是屏幕上能顯示的list的條數那么多。

所 以,我們通過從getFirstVisiblePosition的值到getLastVisiblePosition的值之間的listitem和需要進 行更新的條件(比如id)進行比較確定哪一個是要更新的(如果不在當前可是范圍內也就沒有必要更新了,等list拉動的時候自然就會更新出來)


代碼如下,其實這個方法是google 2011年開發者大會上提出的方法——ListView單條更新

?

1
2
3
4
5
6
7
8
9
10
11
12
private void updateSingleRow(ListView listView, long id) { 
   
        if (listView != null) { 
            int start = listView.getFirstVisiblePosition(); 
            for (int i = start, j = listView.getLastVisiblePosition(); i <= j; i++) 
                if (id == ((Messages) listView.getItemAtPosition(i)).getId()) { 
                    View view = listView.getChildAt(i - start); 
                    getView(i, view, listView); 
                    break
                
        
    }



向AI問一下細節

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

AI

江门市| 辽源市| 娄底市| 广西| 巴青县| 乌鲁木齐市| 和政县| 左贡县| 扎兰屯市| 斗六市| 上栗县| 通道| 乐东| 鄂托克前旗| 南雄市| 沙雅县| 土默特左旗| 长武县| 泸西县| 从江县| 麟游县| 陆丰市| 临湘市| 桦川县| 江源县| 阿勒泰市| 庆阳市| 米易县| 郸城县| 瑞昌市| 准格尔旗| 阿拉善盟| 萨嘎县| 会昌县| 宜兰市| 那坡县| 观塘区| 鄂伦春自治旗| 长汀县| 聂拉木县| 鸡泽县|