2

У меня есть ListView:ListView слушатель не перехватывать события из пункта

<ListView 
     android:id="@+id/sensorList" 
     android:layout_width="match_parent" 
     android:layout_height="250dp" 
     android:layout_centerHorizontal="true" 
     android:layout_margin="16dp" 
     android:layout_below="@+id/chooseHint" 
     android:choiceMode="multipleChoice" > 
</ListView> 

Который имеет CheckedTextView с в нем:

<?xml version="1.0" encoding="utf-8"?> 
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/textView" 
    android:layout_margin="5dp" 
    style="@android:style/TextAppearance.Medium" 
    android:checkMark="?android:attr/listChoiceIndicatorMultiple" /> 

Я добавил OnItemClickListener, чтобы сделать что-то, когда элемент списка щелкнул , Но также, когда щелкнут элемент, флажок переключается. Как я могу добиться, чтобы слушатель ловил событие click, но флажок не установлен?

ответ

3

Чтобы предотвратить CheckedTextView от переключаясь, выполните следующие действия:
1. Подкласс CheckedTextView.
2. Переопределение setChecked(boolean) способ.
3. Замените свой CheckedTextView на переопределенный.

Код для шагов 1 и 2:

package com.example.multichoicelist; 
public class UnresponsiveCheckedTextView extends CheckedTextView { 

    public UnresponsiveCheckedTextView(Context context) { 
      this(context, null); 
    } 

    public UnresponsiveCheckedTextView(Context context, AttributeSet attrs) { 
     this(context, attrs, 0); 
    } 

    public UnresponsiveCheckedTextView(Context context, AttributeSet attrs, 
      int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    public void setChecked(boolean checked) { 
       //Do nothing. 
    } 

} 

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

XML для шага 3:

<com.example.multichoicelist.UnresponsiveCheckedTextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/textView" 
    style="@android:style/TextAppearance.Medium" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_margin="5dp" 
    android:checkMark="?android:attr/listChoiceIndicatorMultiple" 
/> 

Ниже деятельность, содержащая множественный выбор ListView с OnItemClickListener, который показывает элемент списка, который был щелкнули. Обратите внимание на то, что во время такого события щелчка флажок не переключаемых (благодаря переопределен CheckedTextView реализации):

package com.example.multichoicelist; 
public class MainActivity extends ListActivity implements OnItemClickListener { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ListView mListView = getListView(); 
     mListView.setOnItemClickListener(this); 
     mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
     mListView.setAdapter(ArrayAdapter.createFromResource(this, 
       R.array.phonetic_alphabet, R.layout.list_item)); 
    } 

    @Override 
    public void onItemClick(AdapterView<?> arg0, View childView, 
      int adapterPosition, long arg3) { 
     Toast.makeText(this, 
       ((CheckedTextView) childView).getText() + " selected", 
       Toast.LENGTH_SHORT).show(); 
    } 

} 

На рисунке ниже показано поведение множественного выбора ListView, когда элемент списка с именем «Charlie» является щелчок:

enter image description here

+0

Спасибо, очень хороший ответ! – WonderCsabo

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