日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android:ListView常见错位之CheckBox错位

發布時間:2025/3/20 Android 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android:ListView常见错位之CheckBox错位 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ListView在什么樣的情況下會出現錯位?錯位的原因是什么?怎么解決?下面的內容會對這些問題做一個講解。

1.ListView在什么樣的情況下會出現錯位?

其實錯位是當我們的ListView的每個單項(item)從屏幕中移入或是移出,我們的系統會對這個item的狀態進行重新定義——是否被選中等等。一般只是顯示的情況下,我們的ListView很少出現錯位,因為狀態沒有改變。

我們現在就是拿一個CheckBox組件來說明,因為CheckBox是一個比較基礎的換件,而且CheckBox的狀態改變比較明顯。

例如下面這種情況:

初始界面中選中第0個和第1個:


當我們對屏幕進行滑動再回來的時候,我們會看到,第0個的CheckBox的勾不見了。第9個的CheckBox出現了勾,這是個就是錯位。


也就是說我們在重新加載由屏幕之外的item移到屏幕之內時,CheckBox的狀態發生改變。

如是,我們想是不是有一種方法來記錄這種變化,且變化只是在監聽器監聽到有需要改變的狀態發生時,才會變化。

這里我們用一個ArrayList<Boolean>的數組來記錄。

關鍵代碼如下:

public View getView(final int position, View convertView, ViewGroup parent) {ViewHolder viewHolder = null;if (recordMap.get(position) == null) {convertView = mInflater.inflate(R.layout.listview_item, null);viewHolder = new ViewHolder(convertView);Log.i(TAG, "1: " + position);final int finalP = position;recordMap.put(position, convertView);viewHolder.checkBox.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {CheckBox checkBox = (CheckBox)v;isChecked.set(finalP, checkBox.isChecked());}});convertView.setTag(viewHolder);} else {Log.i(TAG, "2: " + position);convertView = recordMap.get(position);viewHolder = (ViewHolder) convertView.getTag();}viewHolder.button.setText("click " + position);viewHolder.checkBox.setChecked(isChecked.get(position));return convertView;}


-----------------------------------------------? 程序源碼下載

總結

以上是生活随笔為你收集整理的Android:ListView常见错位之CheckBox错位的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。