2009-02-21 3 views
3

Контекст: Я хочу иметь ListView, который не получит фокус (например, не будет выделить строку, когда пользователь ее коснется). Но каждый виджет строки имеет свой собственный OnClickListener. Вот что я указываю в макет XML:Управление фокусом в ListView

android:choiceMode="none" 
android:focusableInTouchMode="false" 
android:focusable="false" 

элемент управления ListView по-прежнему ведет себя точно так же. Может кто-то пожалуйста, объясните

  1. Взаимосвязь между тремя
  2. Что правильный путь для создания ListView, который не получает фокус?

TIA.

+0

Hi Quintin. У меня такая же проблема. Вы нашли ответ? – pocoa

+0

Два лучших решения http://stackoverflow.com/questions/2098558/listview-with-clickable-editable-widget/27898369#27898369 – Nepster

ответ

2

Список, получающий фокус, отличается от выбранной строки, не выделяющей. Список получает фокус всякий раз, когда пользователь находится в нем. Лучшее, что может сделать ListView, - сообщить int за все, что выбрал пользователь. Я не уверен, что у каждого виджета строки есть собственный ClickListener. Я не знаю никаких виджетов строк. onListItemClick относится к ListView.

Я еще не смог выяснить это, но между android:listSelector и android:background и настройкой альфа-каналов. Я полагаю, что был бы способ сделать выборный вид так же, как не выбранная строка.

android:listSelector="#8fff" делает это так, что только изменения переднего плана при выборе.

Похоже, что андроид сам выбирает не выбранный передний план, что делает это сложнее. Надеюсь, это поможет.

+1

Фактически, когда вы устанавливаете эти атрибуты на «@android: color/transparent», есть нет визуальной индикации того, выбран ли элемент или нет. – Nappy

6

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

после setContentView ...

myListView.setFocusableInTouchMode(false); 

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

myListView.setOnFocusChangeListener(new OnFocusChangeListener(){ 

     public void onFocusChange(View v, boolean hasFocus) 
     { 
      v.setBackgroundColor(hasFocus ? Color.GRAY : Color.BLACK); 
     } 
    }); 

    myListView.setClickable(true); 
+0

Я не понимаю, почему, но установка 'android: focusableInTouchMode =" false "' в представлении XML не остановит его фокусировку/прокрутку во время выполнения. Только вызов 'listView.setFocusableInTouchMode (false);' в коде работал. Магия! – infl3x

0

Не можете ли вы использовать RadioButton, когда пользователь прикасается к строке в списке?

Ниже приводится отрывок из моего собственного кода.

// Create an adapter with a simple list item with single choice. 
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_single_choice, categories); 

// Set the adapter to your list 
listView.setAdapter(adapter); 

Cheers!

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