2012-05-20 1 views
0

Все,Listview Custom Layout Multiple Choice

Я хотел бы создать список, позволяющий осуществлять множественный выбор. Типичными решениями являются получение курсора и использование SimpleCursorAdapter.

 SimpleCursorAdapter adapter2 = new SimpleCursorAdapter(this, 
        R.layout.simple_list_item_multiple_choice, cur2, cols2, views2); 

Я могу получить эту работу при использовании R.layout.simple_list_item_multiple_choice. Я получаю галочки, чтобы работать, когда выбрано несколько элементов.

Итак, я решил попробовать его с помощью сделанного на заказ макета. Вот код xml для моего макета.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 


    <TextView 
     android:id="@+id/name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 

     android:textAppearance="?android:attr/textAppearanceLarge" /> 


    <TextView 
     android:id="@+id/lookup" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 

     android:textAppearance="?android:attr/textAppearanceSmall" /> 


    <TextView 
     android:id="@+id/hasphone" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 

     android:textAppearance="?android:attr/textAppearanceSmall" /> 

    <CheckedTextView 
     android:id="@+id/checkedTextView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 

     android:checkMark="?android:attr/listChoiceIndicatorMultiple"/> 

</LinearLayout> 

Так вот моя проблема. Макет надувается отлично, используя тот же код и устанавливая ChoiceMode несколько в моем списке. Данные курсора заполнены штрафом.

Однако проблема заключается в том, что флажки не отображаются в выбранном виде (проверка в поле), когда я нажимаю на элемент. Есть ли что-то, что мне не хватает, что не связано с созданием пользовательского адаптера?

Любая помощь будет оценена по достоинству.

Благодаря


l2.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 

l2 мой ListView.

+0

Вы хотите, чтобы это произошло, когда вы нажимаете на элемент списка или когда вы нажимаете этот флажок в элементе списка? – Barak

+0

Я бы предпочел, чтобы это произошло, когда я нажимаю элемент списка. Если вы знаете, как это сделать, я бы не прочь понять, как это сделать в обоих направлениях. Thx –

+0

С CheckedTextView вы не можете обойти оба, я думал о TextView и Checkbox. Во всяком случае, вы дважды вызываете LinearLayout ... ваш файл на самом деле такой? Если это так, удалите эту первую подсказку LinearLayout и посмотрите, что произойдет. – Barak

ответ

5

Я не в CheckedTextView ... из моего понимания, он должен переключать проверку, когда вы нажимаете на строку.

Я полагаю, вы могли бы попытаться заставить его так:

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
    CheckedTextView chkTxt = (CheckedTextView) v.findViewById(R.id.CheckedTextView1); 
    chkTxt.toggle(); 
} 

Примечание это будет рубить, и вы должны действительно найти корень проблемы, но это может заставить вас идти в то же время.

EDIT

После долгих Googling, я обнаружил, что проблема ... корень макета строки должна быть проверяемыми использовать CheckedTextView и LinearLayout нет.

Подробнее googling нашел решение ... переопределить класс LinearLayout.

Инструкция/код here

+0

Ссылка работала. Спасибо, что нашел. –

1

Проблема с «вопрос у меня есть, что галочки не отображаются, как выбраны» из-за вашу неправильную раскладку. Он должен быть без LinearLayout:

 

    <?xml version="1.0" encoding="utf-8"?> 
    <TextView 
     android:id="@+id/name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 

     android:textAppearance="?android:attr/textAppearanceLarge" /> 


    <TextView 
     android:id="@+id/lookup" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 

     android:textAppearance="?android:attr/textAppearanceSmall" /> 


    <TextView 
     android:id="@+id/hasphone" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 

     android:textAppearance="?android:attr/textAppearanceSmall" /> 

    <CheckedTextView 
     android:id="@+id/checkedTextView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 

     android:checkMark="?android:attr/listChoiceIndicatorMultiple" /> 

Тогда SimpleCursorAdapter может установить правильно ваш "checkedTextView1" (с видимым эффектом).

В моем случае я использовал ArrayAdapter, и он сработал.

 

    list.setAdapter(new ArrayAdapter<String>(this, R.layout.category_layout, 
        R.id.category_checkedText, this.categories)); 

 Смежные вопросы

  • Нет связанных вопросов^_^