как захватить событие флажка в ListView

1

Я добавил в свой список только флажки.
list_checkbox.xml:
<?xml version="1.0" encoding="utf-8"?>
<CheckBox xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="42px">
</CheckBox>

В java; для захвата события в списке я использовал это:

items1={" "," "," "," "}; //blank i.e. no text near checkbox

lv1.setAdapter(new ArrayAdapter<String>(this, R.layout.list_checkbox, items1));
lv1.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view,int position, long id) {

      // When clicked,put code here.....
    }
  });

, но теперь, где и как захватить событие флажка? подробно plz.
 Я новичок.
спасибо..

  • 0
    Вы сами ответили. В onItemClick вы прокомментировали свой ответ прямо здесь. Следующий вопрос - что вы хотите делать, когда на элемент нажимают.
  • 0
    То есть, когда элемент нажимается в списке. Я хочу захватить для флажка. если установлен первый флажок, вызвать функцию A, если установлен третий, вызвать функцию B и т. д.
Теги:
checkbox
listview
android-arrayadapter
android-listview

1 ответ

6
Лучший ответ

Если вы введете в ListView либо сфокусируемое, либо кликаемое представление, то ваш OnItemClickListener не будет вызван. Флажок установлен по умолчанию, поэтому установка OnItemClickListener в этом случае ничего не сделает.

Что вы можете сделать в этом случае - это реализовать пользовательский адаптер (просто расширить ArrayAdapter) и добавить OnClickListener для каждого представления, которое вы предоставляете для ListView.

public class TestAdapter extends ArrayAdapter {
    ...
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = super.getView(position, convertView, parent);
        v.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // Do your logic here eg. if ((CheckBox)v).isChecked()...
             }
         });
         return v;
    }
}

Вы можете найти очень хорошее руководство по этому разделу здесь. Стоит прочитать всю главу, но ответ на ваш вопрос приведен на стр. 112 "Интерактивные строки".

Также просмотрите этот вопрос о переполнении стека.

  • 0
    я попробую это и вернусь 2 ты .. спасибо ..
  • 0
    хороший ответ и отличный указатель на commonsware

Ещё вопросы

Сообщество Overcoder
Наверх
Меню