Android:ListView常见错位之CheckBox错位
生活随笔
收集整理的這篇文章主要介紹了
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错位的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android在ListView中嵌套一
- 下一篇: Java读取指定路径下的文件列表