Сосредоточьтесь на 1-м элементе в списке при запуске активности Android

Я разрабатываю приложение, которое, когда я нажимаю кнопку, запускает новую активность (ContactList.java), содержащую список, называемый mContactList. Когда действие начинается, я хочу, чтобы первый элемент списка был автоматически сфокусирован.

Я пробовал что-то вроде этого:

ContactList.java

mContactsList.requestFocus(mContactsList.getFirstVisiblePosition());

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

selected_rectangle.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <stroke
        android:color="@color/blue"
        android:width="5dp"/>
</shape>

selector_contact_list.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true"
            android:drawable="@drawable/selected_rectangle"/> </selector>

По какой-то причине этот код не работает, и я не могу установить фокус на первом элементе списка (поскольку вокруг первого элемента списка не появляется прямоугольник).

Может ли кто-нибудь дать мне подсказки, что происходит?


person insrod    schedule 20.04.2015    source источник
comment
mContactsList.setSelection(firstVisiblePosition) должен переместить фокус на первый элемент.   -  person Napolean    schedule 20.04.2015
comment
Я пробовал это раньше. Все еще не работает.   -  person insrod    schedule 20.04.2015


Ответы (2)


Обратите внимание, что настройка фокуса и настройка выбора - это две разные вещи... и я думаю, вы имеете в виду вторую, если да, попробуйте это:

listViewName.setSelection(positionOfItem);

если это не сработало, попробуйте requestFocusFromTouch() перед вызовом метода setSelection().

и если это не сработало, попробуйте это:

listViewName.setItemChecked(positionOfItem, true);

Или это:

listViewName.smoothScrollToPosition(positionOfItem);

Для других решений попробуйте ответы по этой ссылке: не работает

person M-Y    schedule 20.04.2015
comment
ты пробовал listViewName.setSelection(0)? - person M-Y; 20.04.2015
comment
да. и listViewName.setSelection(1). Может ли метод setSelection(int pos) подходить только для списка флажков? - person insrod; 20.04.2015
comment
Отредактировал мой ответ, надеюсь, что это поможет. - person M-Y; 20.04.2015

Использовать

listview.setselection(thenumber/position);
person silverFoxA    schedule 20.04.2015