Android CheckedTextView
У меня есть listview
который содержит checkedtextview
, Мое приложение перемещается из верхней части списка вниз. Я хочу проверить, проверен ли элемент перед вызовом действия. Если он не отмечен, я хочу перейти к следующему пункту в списке.
Например
Пункт 1 - Проверено
пункт 2 - проверено
Пункт 3 - Не проверено
Пункт 4 - Проверено
Итак, я хочу, чтобы приложение обрабатывалось следующим образом:
Элемент 1
Пункт 2
Пункт 4
Я не уверен, как получить доступ к проверенному статусу элемента из listview
позиция.
Логика, которую я хочу, заключается в следующем:
Is Current Item checked?
Yes:
Call action
No:
Move to next item.
Reloop to top of void.
Мне нужно что-то там, чтобы остановить бесконечный цикл.
2 ответа
Одним из решений будет использование ArrayList
позиций. Когда пользователь проверяет / снимает флажок checkbox
, добавьте / удалите соответственно позицию в вашем ArrayList
, Затем, когда пользователь закончил, просто переберите список, чтобы узнать, какая позиция была выбрана.
1.) Сначала создайте массив, который указывает состояние проверенных элементов в вашем адаптере
(при условии, что вы продлите BaseAdapter
класс для этого):
private boolean [] itemsChecked = new boolean [getCount()];
2.) Затем создайте OnCheckedChangeListener
:
private OnCheckedChangeListener listener = new OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton button, boolean checked)
{
Integer index = (Integer)button.getTag();
itemsChecked[index] = checked;
}
}
3.) В ваших адаптерах getView()
метод:
public View getView(int index, View view, ViewGroup parent)
{
/*...*/
CheckBox checkBox = /*get the checkbox*/;
checkbox.setTag(index);
checkBox.setOnCheckedChangeListener(listener);
/*...*/
}
4.) В onClick()
метод:
public void onClick(View view)
{
//just get the boolean array somehow
boolean [] itemsChecked = adapter.getItemsCheckedArray();
for(int i=0; i<itemsChecked.length; i++)
{
if(itemsChecked[i])
{
//the i th item was checked
}
else
{
//it isnt checked
}
}
}