我的列表视图有一些小问题。每个项目都有一些信息和一个复选框。这显示得很好,我可以选择和取消选择复选框等。
但是我发现了一些奇怪的行为。假设我单击第一行的第一个复选框。如果 ListView 很小,那么您不需要向下滚动,这可以正常工作。但是如果 ListView 很大,所以我需要向下滚动才能查看所有项目,底部的一些随机项目也会被点击。相反的行为相同,如果我单击列表视图底部的复选框并向上滚动,则会在顶部单击一些随机复选框。如果我在某处单击多个复选框,则在其他地方单击的复选框数量相同。我认为这发生在调用 GetView(...) 时,即更新时。然后它会点击一些新的复选框,但我不知道为什么。
在这里感谢一些帮助!:)
我的适配器的 SSSCE:
public class ListViewAdapterSSCCE : BaseAdapter
{
private Activity myActivity;
private string[] someData;
private int numberOfElements;
private CheckBox[] boxes;
public ListViewAdapterSSCCE(Activity activity)
{
this.myActivity = activity;
for (int i = 0; i < numberOfElements; i++)
this.boxes[i] = new CheckBox(myActivity);
}
public void SetData(string[] someData)
{
this.someData = someData;
this.numberOfElements = someData.Length;
}
public void CheckAllBoxes(bool isChecked)
{
for (int i = 0; i < numberOfElements; i++)
this.boxes[i].Checked = isChecked;
}
public override Java.Lang.Object GetItem(int position)
{
return null;
}
public override long GetItemId(int position)
{
return 10;
}
public override int Count
{
get { return numberOfElements; }
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
if (convertView == null)
{
LayoutInflater inflater = (LayoutInflater)myActivity.GetSystemService(Context.LayoutInflaterService);
convertView = inflater.Inflate(Resource.Layout.ChildrenList_item, null);
}
var itemBox = convertView.FindViewById<CheckBox>(Resource.Id.checkbox);
this.boxes[position] = itemBox;
var textView = convertView.FindViewById<TextView>(Resource.Id.item_data);
textView.Text = this.someData[position];
return convertView;
}
}