亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Adapter實現ListView帶多選框等狀態的自定義控件的注意事項

2020-04-11 12:32:53
字體:
來源:轉載
供稿:網友
Android本身為ListView提供了幾個方便的Adapter,比如ArrayAdapter、SimpleCurrentAdapter等等。但是為了實現更復雜的列表視圖和控制,一般都要繼承BaseAdapter來實現自己的Adapter。

我需要的ListView是如圖一樣的實現SD卡資源文件瀏覽列表,每個列表項由一個ImageView、TextView、CheckBox組成,并且要求當整個列表中有一個或一個以上的Checkbox被選中時,右上角的搜索按鈕就顯示出來,否則就隱藏,因此需要對每個列表項的CheckBox設置監聽器。若使用Android提供的Adapter實現起來比較復雜,所以我選擇繼承BaseAdapter來實現自己的Adapter。

首先要知道的是ListView顯示原理。ListView接收了Adapter之后,ListView的列表項數據是來源于接收的Adapter的。當ListView要展現出來的時候,ListView就會調用Adapter的getCount方法來獲得一共需要繪制多少個列表項,之后就開始調用getView方法來獲得每個列表項的View進行裝載。也就是說ListView的列表項就是每次調用getView返回的View,每次調用getView獲得的列表項View是什么樣子,我們看到的這個列表項就是什么樣子。

我繼承BaseAdapter來實現自己的Adapter,至少需要重寫基本的getView、getCount、getItem、getItemID四個方法。其中getCount和getView的功能如上所述,所以我要想實現對每個列表項多選框按鈕的監聽就需要在getView中返回View給ListView之前,對View中的多選框設置監聽器。getView方法中帶三個參數public View getView(int position,View convertView,ViewGroup parent),一般都是將convertView最為返回的View。

在這里,需要插播說明一下Android系統對ListView的實現小細節。Android構造ListView列表項的時候每次只會構造足夠滿足屏幕顯示數量的列表項,一般都是10個左右。當ListView的列表項多于屏幕能夠顯示的列表項的時候,ListView就可以上下拉動,每次拉動顯示后續列表項時就會再次調用getView方法來構造后續列表項的View。如果ListView是首次顯示出來,那么getView的參數View convertView就是null空的;如果是拉動ListView調用的getView,那么這時getView的參數convertView就不再是null,而是隨著拉動剛剛被拉走隱藏掉的列表項的View。這么做的好處是可以節省資源。

基于這個細節,如果重寫getView方法時,要將參數convertView作為返回View,那么getView中就應該判斷convertView是否為null。為空的話就需要使用Inflater構造出來,不為空的話就可以直接使用了。我的需求中需要對多選框進行監聽,所以在返回convertView之前需要中convertView中獲取多選框控件并設置監聽器。

一開始,我以為這樣就能夠實現我的需求了,但是出來的結果卻意想不到。當我點擊一個多選框后,將列表往下拉,下面出來的沒有選中的列表框也變成選中的狀態。注意到我每次點擊一個多選框后往下拉同步被選中的多選框的距離都是不變的,總是相隔11項。于是,回想getView中convertView參數的特點,當我往下拉的時候,ListView調用getView方法中的convertView就是回收來的因為拉動被隱藏的View。在我這個例子中,由于多選框是一種帶有狀態標示的控件,我的getView沒有對其狀態進行重新設置,所以就造成了這種奇怪現象。我的解決方法是在我實現的Adapter類中創建一個boolean數組用于保存對應列表項多選框的狀態(getView中第一個參數position就是列表項ID,是根據數據來標識,不是根據列表項View來標識的,所以可以根據position來對列表項數據進行選中和非選中標識),每次調用getView都會在其中判斷position位置上的boolean值來決定多選框的狀態。

同樣的,基于這個原理,使用其它帶狀態的控件也需要注意getView回收的問題。當然,也可以不使用convertView最為getView的返回結果,而在getView每次調用都重新構造一個View,或者Adapter類中構造一個與數據數量等長的View數組。不過這么做的話就比較消耗資源。

另外,BaseAdapter中的getItem和getItemId方法再構造ListView構造過程中并沒有使用過,不過據說是在關于ListView的一些監聽器中會調用到,所以繼承BaseAdapter時最好也給這兩個方法返回一個有意義的值。getItemId一般返回對應的position,getItem返回對應position的列表數據對象。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产欧美精品久久久| 日韩欧美第一页| 国产精品女人久久久久久| 亚洲视频在线免费看| 在线精品国产成人综合| 欧美电影在线播放| 国产精品久久久久av免费| 国产成人精品网站| 国产999在线观看| 精品国偷自产在线视频99| 狠狠综合久久av一区二区小说| 成人春色激情网| 日韩在线国产精品| 日韩精品在线观看网站| 欧美黄色片免费观看| 成人精品久久久| 日韩亚洲一区二区| 国产suv精品一区二区三区88区| 久热精品视频在线观看一区| 粉嫩老牛aⅴ一区二区三区| 精品国产一区二区三区久久| 久久精品国产亚洲一区二区| 久久久久五月天| 青青a在线精品免费观看| 一区二区三区 在线观看视| 91高清在线免费观看| www.xxxx精品| 精品视频www| 久久久久北条麻妃免费看| 日韩视频免费观看| 久久久久久久久久久人体| 国产香蕉精品视频一区二区三区| 中文字幕亚洲专区| 日韩一中文字幕| 欧美激情第三页| 精品久久久久久久久久久久久| 欧美激情xxxx性bbbb| 92福利视频午夜1000合集在线观看| 日韩精品视频在线播放| 最近中文字幕2019免费| 国产成人综合精品在线| 国产成人精品久久久| 日韩欧美第一页| 日日狠狠久久偷偷四色综合免费| 欧美大荫蒂xxx| 欧美肥婆姓交大片| 国产成+人+综合+亚洲欧美丁香花| 亚洲男人av在线| 日韩免费在线视频| 色综合伊人色综合网| 亚洲国内精品视频| 日韩欧美有码在线| 亚洲欧美国产一区二区三区| 国产精品九九久久久久久久| 国产一区二区丝袜| 精品久久久久久久久久ntr影视| 国产综合色香蕉精品| 日韩免费不卡av| 国产精品成人品| 国产精品一区av| 亚洲一区二区三区777| 国产精品免费看久久久香蕉| 亚洲视频在线观看免费| 亚洲视频一区二区三区| 原创国产精品91| 超碰精品一区二区三区乱码| 在线一区二区日韩| 成人精品视频在线| 精品香蕉在线观看视频一| 亚洲丁香婷深爱综合| 欧美激情中文字幕乱码免费| 欧美黑人一区二区三区| 亚洲伦理中文字幕| 国产精品视频自拍| 亚洲区免费影片| 亚洲高清色综合| 精品国产欧美一区二区三区成人| 亚洲一区二区久久久久久| 亚洲第一页中文字幕| 国产成+人+综合+亚洲欧美丁香花| 亚洲精品www| 久久手机精品视频| 欧美成人精品激情在线观看| 欧美日韩国产页| 1769国内精品视频在线播放| 日韩大胆人体377p| 美女啪啪无遮挡免费久久网站| 欧美野外猛男的大粗鳮| 国产亚洲欧美另类中文| 久久综合免费视频影院| 97久久国产精品| 午夜免费久久久久| 久久精品国产一区| 国产不卡精品视男人的天堂| 国产丝袜视频一区| 欧美日韩爱爱视频| 久久人人爽人人爽人人片亚洲| 日韩精品视频在线免费观看| 国产成人jvid在线播放| 国产精品一区专区欧美日韩| 亚洲综合中文字幕在线| 国产精选久久久久久| 色妞一区二区三区| 欧日韩在线观看| 欧美黄色性视频| 久精品免费视频| 欧美日韩国产激情| 精品亚洲国产成av人片传媒| 欧美另类交人妖| 欧美一级视频一区二区| 亚洲一级片在线看| 成人免费午夜电影| 2019中文字幕全在线观看| 精品亚洲永久免费精品| 色777狠狠综合秋免鲁丝| 亚洲女人初尝黑人巨大| 亚洲欧美激情一区| 欧美一级在线播放| 日韩高清电影免费观看完整| 成人福利视频在线观看| 国产人妖伪娘一区91| 国产精品一区二区电影| 黑人巨大精品欧美一区二区一视频| 中文字幕免费精品一区高清| 中文字幕亚洲欧美日韩高清| 亚洲男人天堂2024| 成人a级免费视频| 亚洲xxxx在线| 中文字幕在线视频日韩| 77777亚洲午夜久久多人| 欧美日韩国产中文精品字幕自在自线| 尤物tv国产一区| 国产精品h片在线播放| 日本精品视频在线播放| 在线观看欧美日韩国产| 久久精品99国产精品酒店日本| 岛国精品视频在线播放| 国产91露脸中文字幕在线| 福利微拍一区二区| 国产精品一区二区久久久久| 国产乱肥老妇国产一区二| 在线观看日韩视频| 成人av在线亚洲| 欧美精品在线第一页| 97在线视频免费看| 久久综合免费视频影院| www.日韩不卡电影av| 精品中文字幕在线观看| 国产精品入口免费视| 久久综合久中文字幕青草| 欧美日韩亚洲精品一区二区三区| 理论片在线不卡免费观看| 精品在线观看国产| 神马久久桃色视频| 欧美午夜精品久久久久久人妖| 综合国产在线观看| 欧美一级淫片aaaaaaa视频| 日韩高清电影好看的电视剧电影| 97精品一区二区视频在线观看| 国产91色在线|免| 久久久精品一区二区| 日韩有码在线电影| 欧美美女15p| 欧美成人激情图片网|