Метод, который просматривает чекбоксы в списке

Я экспериментирую с этим примером проекта: http://schimpf.es/listview-with-checkboxes-inside/

Я добавил кнопку внутри XML-файла, который содержит ListView. И когда он нажимается, я хочу метод, который просматривает массив флажков и проверяет, все ли проверены.

Может кто-то помочь мне, пожалуйста?

3 ответа

Попробуй это:

private boolean checkBoxes(){
  for(SampleData s : dataList) if (s.selected == false) return false;
  return true;
}

Я не могу заставить это работать. Это всегда возвращает ложь.

Я положил метод в CheckBoxListAdapter.java

public boolean allChecked() {
    for (Object item : dataList) {
        if (!((SampleData) item).isSelected())
            return false;
    }
    return true;
}

и в моей MainActivity я вызываю метод, когда кнопка onClick. И тогда я получаю ценность этого.

public void onClickNeste_sjekkliste (View v) {
    CheckboxListAdapter test = new CheckboxListAdapter(null);
    test.allChecked();
    boolean ifCheckedAll = test.allChecked();

    if (ifCheckedAll == false) {
        Log.d("CheckedAll", "false");
    }
    else if (ifCheckedAll == true) {
        Log.d("CheckedAll", "true");
    }   
}

Перебрать каждую запись в dataList. Если вы получили тот, который не установлен, верните false. Если они все прошли тест, возвращают true:

private boolean allChecked()
{
    for(Object item : dataList)
    {
        if (!(SampleData)item.isSelected())
            return false;
    }
    return true;
}

Обратите внимание, что dataList был определен как ArrayList типа Object, а не типа SampleData. Таким образом, когда вы повторяете каждую запись, она должна быть приведена к SampleData.

РЕДАКТИРОВАТЬ:

Чтобы использовать это, измените класс Activity, чтобы "адаптер" был переменной класса:

public class CheckboxListActivity extends ListActivity {

    //Define adapter here so that you can refer to it anywhere within the Activity
    CheckboxListAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_checkbox);

        //Set the class level 'adapter' variable
        adapter = new CheckboxListAdapter(getLayoutInflater());
        getListView().setAdapter(adapter);
    }
}

В вашем onClick вызовите новый метод для переменной 'adapter':

public void onClickNeste_sjekkliste (View v) {
    boolean ifCheckedAll = adapter.allChecked();

    if (ifCheckedAll == false) {
        Log.d("CheckedAll", "false");
    }
    else if (ifCheckedAll == true) {
        Log.d("CheckedAll", "true");
    }   
}
Другие вопросы по тегам