Флажок нажмите в ListView
У меня есть listview с некоторым текстом и флажком. Я могу щелкнуть флажок, и проверка изменится,но когда я пытаюсь прослушать изменяемую проверку или щелчок, прослушиватель никогда не срабатывает.
У меня есть listview в действии (не ListActivity)
Расписание.XML-макет:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:id="@+id/schedulerLayout">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
android:paddingBottom="10dp">
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/currentHours"
android:textSize="50dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="50dp"
android:text=":"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/currentMinutes"
android:textSize="50dp"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="vertical">
<!--vertical filler for am/pm display -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ampm"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:paddingLeft="10dp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/currentDayOfWeek"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/currentDate"/>
</LinearLayout>
</LinearLayout>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/scheduleButton"
android:text="@string/newSchedule"/>
<View
android:layout_width="fill_parent"
android:layout_height="1dip"
android:background="#FFFFFFFF"/>
<ListView
android:id="@+id/scheduler_list_view"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:focusableInTouchMode="false"/>
</LinearLayout>
Schedulerow.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true">
<TextView
android:id="@+id/scheduleListTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"
android:layout_alignParentTop="true"
android:text="Title"/>
<TextView
android:id="@+id/scheduleListDays"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/scheduleListTitle"
android:text="Days"/>
<TextView
android:id="@+id/scheduleListMonths"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/scheduleListDays"
android:text="Months"/>
<View
android:id="@+id/schedulerSeparator"
android:layout_width="fill_parent"
android:layout_height="1dip"
android:background="#FFFFFFFF"
android:layout_below="@id/scheduleListMonths"/>
<CheckBox
android:id="@+id/scheduleCheckBox"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:focusable="false"
android:focusableInTouchMode="false"
android:clickable="true"
android:layout_above="@id/schedulerSeparator"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"/>
<TextView
android:id="@+id/scheduleListTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/scheduleCheckBox"
android:text="Time"/>
</RelativeLayout>
Я заполняю данные следующим образом:
SimpleAdapter adapter = new SimpleAdapter(this,
data,
R.layout.schedulerow,
new String[] {"Title","Time","Day", "Month"},
new int[] { R.id.scheduleListTitle, R.id.scheduleListTime,R.id.scheduleListDays, R.id.scheduleListMonths});
listView.setAdapter(adapter);
Если я попытаюсь добавить слушателя к флажку, он ничего не сделает. Есть предложения? Я уже смотрел через тонну примеров кода и подобных вопросов, и ни один из них, кажется, не работает.
1 ответ:
Одно из решений состоит в том, чтобы забыть элемент списка click listener и использовать другой прослушиватель для остальной части элемента, кроме флажка.. В xml-файле item layout поместите другие представления в один макет и установите прослушиватель щелчков на этом и установите флажок check listener on, как обычно. Оба будут работать без проблем. Не используйте элемент списка нажмите кнопку прослушиватель.
class MySimpleAdapter extends SimpleAdapter { ... @Override void getView(.....) { View view = super.getView(.....); view.findViewById(R.id.checkboxid).setOnCheckChangedListner(checklistener); view.findViewById(R.id.restOfitemview).setOnClickListner(clickListner); return view; } }
Определите два слушателя и установите, как показано выше.
Edit: сначала попробуйте свой метод (блокировка фокуса на флажке) с помощью
MySimpleAdapter
установка только checkchangelistener.. Если это не работает, то используйте выше решение разделения макета элемента.