Android ListView 問題彙總

2021-09-02 13:23:14 字數 1412 閱讀 4468

listview 問題彙總:

1. item 中的check view 選中混亂

listview 快取機制導致的。

解決方案可以是:

在adapter裡的getview方法裡先呼叫holder.cbiamge.setoncheckedchangelistener方法,

再呼叫holder.cbiamge.setchecked方法即可解決問題。(holder.cbiamge)是乙個checkbox物件。

若還要實時記錄checkbox選中了的數量,則上面的解決方案還是不管用,通過在網上的搜尋,終於找到了解決方案,在此記錄一下,該**為:

該解決方案是:

在adapter中呼叫holder.cbiamge.setchecked()時先將checkbox的監聽設為空(holder.cbiamge.setoncheckedchangelistener(null);)

再呼叫holder.cbiamge.setchecked()方法

最後重新設定checkbox的監聽holder.cbiamge.setoncheckedchangelistener(new oncheckedchangelistenerimpl(holder, position));

2. item 內容重複

view 的復用導致的,每次getview呼叫時都設定其內容

3. 第一條item 的物件記錄錯誤

曾經在專案中遇到這樣的需求,選中gridview 中某一項,標記選中項,我的解決方案是:用個sharepreference或者資料庫或者其他記錄被選中的id,在getview時判斷item的id和記錄的id一致時,標記item(可以是設定背景色等),記錄被標記的viewholder lastholder, 當下乙個item被選中時,將先前的lastholder復原。

在這樣的case下會出現問題,選中第一條,退出應用,重新開啟應用,選中第二條,這時,第一條仍舊被選中。

先說一下第二條的原因:

activity 可以配置windowsoftinputmode 的屬性,若不配置當keyboard彈出,會重新繪製介面,listview 當height設定為wrapcontent 或者 matchparent,listview的第一條資料會繪製多次,所以記錄的 lastholder 與我們看到的第一條item未必是匹配的,這是操作lastholder 沒有任何變化。這樣前面的case也可以解釋通,第一條item被繪製多次,

lastholder記錄的物件並不是介面上看到的物件。

解決方案:

針對keyboard彈出導致的第一條item繪製多次可以將 windowsoftinputmode 設定成 adjustnothing 讓keyboard 彈出時不重新繪製介面,但是解決不了第乙個場景,可以重寫gridview或者listview 在onmeasure方法時記錄flag,如果已經繪製顯示出來,則lastholder不在重新賦值

Android ListView優化總結

用多了listview之流 今天小朋友問這個問題時一時還無法回答全面 特此總結。listview多用於顯示具有相同格式之資料,包含的資料型別也極為豐富,聲音 文字等等。流程為,listview找到使用的介面卡,介面卡在逐個例項化,例項化後顯示,資料處理和adapter處理比較關鍵。就資料來說文字倒是...

Android ListView重新整理 載入

網上有現成的框架,pulltorefresh。不過專案裡不可能全部用到,顯得有些臃腫,在此用了xlistview,大同小異。無非就是重寫了listview中的ontouch方法,新增兩個控制項兒 headerview和footerview,新增乙個介面 重新整理和載入。這樣清晰了思路,再整理 就簡單...

Android listview的item設定高度

在item的layout檔案中,用android layout height設定item的高度。執行,高度設定無效。解決辦法 給item設定minheight,即可.最近一直糾結於listview中每個item中高度的問題,在網上只找出乙個方法,就是在每個item裡面加入,也就是imageview,...