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,...