Разработка для Android - флажок isChecked с использованием simple_list_item_multiple_choice и CHOICE_MODE_MULTIPLE - PullRequest
1 голос
/ 17 марта 2012

Я использую simple_list_item_multiple_choice с list.setChoiceMode (ListView.CHOICE_MODE_MULTIPLE);создать список флажков, заполненных запросом к базе данных.Затем я использую onListItemClick для обработки нажатия на список, опять же, это работает нормально.То, что я не могу найти способа сделать (через 5 дней), это написать оператор if, основанный на том, установлен ли флажок, прикрепленный к элементу списка.Что мне нужно, это эквивалент приведенного ниже примера, который отлично работает для флажка, где я могу использовать элемент android: onClick для запуска метода ниже.

public void onCheckboxClicked(View v) {
        // Perform action on clicks, depending on whether it's now checked
        if (((CheckBox) v).isChecked()) {
            Toast.makeText(this, "Selected", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this, "Not selected", Toast.LENGTH_SHORT).show();
        }
    }

Это очень важно для моего приложения, поэтому любые советы будут с благодарностью.Ниже приведен пример, который использует simpleCusrorAdapter:

 Cursor cursor3 = db.rawQuery("SELECT _id, symname FROM tblsymptoms WHERE _id IN ("+sympresult+") ", null);

        adapter = new SimpleCursorAdapter(
                this, 
                android.R.layout.simple_list_item_multiple_choice,
                cursor3, 
                new String[] {"symname","_id"}, 
                new int[] {android.R.id.text1});
        setListAdapter(adapter);
        ListView list=getListView();
        list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

Ответы [ 2 ]

3 голосов
/ 17 марта 2012

Я решил проблему после нахождения этого очень полезного элемента блога

Я изменил свой onListItemClick на следующее, и он работает как сон:

public void onListItemClick(ListView parent, View view, int position, long id) {


      CheckedTextView check = (CheckedTextView)view;
      check.setChecked(!check.isChecked());
      boolean click = !check.isChecked();
      check.setChecked(click);
      if (click) {
            Toast.makeText(this, "Not Selected", Toast.LENGTH_SHORT).show();
      } else {
          Toast.makeText(this, "Selected", Toast.LENGTH_SHORT).show();
      } 
}
0 голосов
/ 17 марта 2012

Если я правильно понимаю, у каждой строки в вашем списке есть флажок.Когда элемент в списке выбран, вы хотите сказать, установлен ли соответствующий флажок?

Попробуйте использовать метод setTag (...) для каждого элемента списка Просмотр объекта.Затем, когда вызывается метод onListItemClick (), вы можете вызвать getTag (...) для представления (которое вернет ваш флажок).Я предполагаю, что вы используете пользовательский адаптер для заполнения списка.Во время заполнения вы хотите позвонить:

   setTag( CHECKBOX_KEY, checkbox );

Например:

protected void onListItemClick(ListView l, View v, int position, long id) {
    CheckBox cb = (CheckBox)v.getTag( CHECKBOX_KEY );

    boolean isChecked = false;

    if( null != cb ) {
        isChecked = cb.isChecked();
    }

    // .. do whatever you have to here...    

}

Надеюсь, это поможет ...

...