У меня странная проблема!Я пытаюсь создать просмотр списка с флажками.В моем другом потоке мне сказали, что я должен использовать массив, который отслеживает проверенные строки.Я сделал это, и все работало нормально, но логика неверна, и я столкнулся с другой проблемой.
public View getView(final int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.row, null);
}
CheckBox checkbox = (CheckBox)v.findViewById(R.id.checkbox);
checkbox.setChecked(checked[position]);
final LinearLayout rowLayout = (LinearLayout) v.findViewById(R.id.individualRow);
checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener(){
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked)
{
rowLayout.setBackgroundColor(Color.GRAY);
checked[position] = false;
}
else
{
rowLayout.setBackgroundColor(Color.DKGRAY);
checked[position] = true;
}
}
});
}
Если все флажки сняты изначально, все работает нормально, оставляя те, которые я выбрал, проверенными, даже еслиЯ прокручиваю вниз и снова вверх, но проверенный массив не настроен должным образом.По сути, тест if должен быть другим способом!
if(isChecked)
{
rowLayout.setBackgroundColor(Color.GRAY);
checked[position] = true;
}
else
{
rowLayout.setBackgroundColor(Color.DKGRAY);
checked[position] = false;
}
Проблема действительно заключается в прокрутке, потому что каждый раз, когда я прокручиваю, вызывается метод onCheckedChanged и, поскольку он перерабатывает строки, он проходит в позицииновая строка, которая не выбрана, но так как у нее тот же индекс, что и у ранее выбранной, она меняет свое значение.например, если я установлю флажок с индексом 2 (установите для него значение true), а затем прокрутите вниз, то новая строка станет строкой с индексом 2, метод вызывается снова и снимает флажок (поле в проверенном массиве).
Мне нужно, чтобы он "запомнил" все флажки, которые отмечены.Другими словами, я хочу, чтобы проверенный массив был правильно инициализирован.А также помнить, какие флажки отмечены, и не терять их при каждой прокрутке!
Что я делаю не так?
Не могли бы вы мне помочь?
Заранее спасибо -- Майк