リストビューに小さな問題があります。すべてのアイテムには、いくつかの情報とチェックボックスがあります。これは問題なく表示され、チェックボックスなどを選択および選択解除できます。
しかし、私はいくつかの奇妙な行動を発見しました。最初の行の最初のチェックボックスをクリックするとします。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;
}
}