2011-11-03 45 views
0

你好我正在一个应用程序,我基本上只是做一个自定义多选择listview我做了这样的事情LeftAL只是一个数组列表,这个代码在我的onClickAndroid的列表视图更改图像行

if(LeftAL.contains(position)){ 
    ImageView imageView = (ImageView) lView.getChildAt(position).findViewById(R.id.checkbox); 
    imageView.setImageResource(R.drawable.checkboxoff); 
    int i = position; 
    Integer intObj = new Integer(i); 
    LeftAL.remove(intObj); 
}else{ 
    ImageView imageView = (ImageView) lView.getChildAt(position).findViewById(R.id.checkbox); 
    imageView.setImageResource(R.drawable.checkbox); 
    LeftAL.add(position); 
} 

然后checkboxoff看起来像这样

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true"  
    android:drawable="@drawable/checkbox_pressed_off" /> 
<item android:drawable="@drawable/checkbox_off" /> 
</selector> 

和复选框上是基本相同的事情只是不同的图像

现在,一切工作正常,因为它应该和我实际上并没有注意到这一点,但当我检查我的列表中的第3项。它检查并添加到数组列表,因为它应该但是如果我向下滚动到下一组列表项目,我会看到第二组数字3也检查实例让我们只说,例如只有3行显示在我的手机上。

Cat 
Dog 
Egg 
-------off screen----- 
Fox 
Gerbil 
Hog 

我检查狗的话,我滚动沙鼠也将被检查我想这是让Android一样回收或东西,但它是肯定的问题,我怎么能在解决这一问题,以便只有在清单3中检查不3下一步也是如此。

感谢您的帮助

回答

0

的Android完全回收的View S IN一个ListView。您需要做的是确保您将选中/未选中的状态存储在单独的列表中,并在每次显示时相应地设置复选框的状态。

+1

你能否详细解释一下你的意思是在另一个列表中存储checked/unchecked状态你是在说一个列表数组吗?然后我应该怎么知道它的显示与否?感谢您的回答 – user577732

+0

您需要制作另一个ArrayList,其中包含检查状态,并在用户单击其中一行中的复选框时在其中设置正确的条目。然后在ListAdapter中,您可以查看该ArrayList并查看该框是否应该被检查。你不能依靠UI元素来保存它,因为它正在被回收。 – CaseyB