Управление фокусом в ListView - PullRequest
3 голосов
/ 21 февраля 2009

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

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

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

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

ТИА.

Ответы [ 3 ]

6 голосов
/ 21 февраля 2009

Хотя вы указали в 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);
2 голосов
/ 21 февраля 2009

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

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

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

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

0 голосов
/ 09 августа 2012

Не можете ли вы сделать с 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);

ура!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...