У меня возникли небольшие проблемы с моим списком. У каждого элемента есть информация и флажок. Это хорошо видно, я могу выбирать и снижать флажки и т. Д.Адаптер ListView со многими флажками
Однако я обнаружил странное поведение. Допустим, я нажал первый флажок в первой строке. Если 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;
}
}
Вторым я видел ваш ответ, я понял проблему! Понял, что это будет что-то вроде этого. Спасибо за объяснение, а также отличное решение! –