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
        } 
    }
}
Другие вопросы по тегам