Android — пользовательский просмотр списка и выделение

#android #listview #customization

#Android #просмотр списка #настройка

Вопрос:

Я много пытался заставить все работать, но без какого-либо успеха.

Я внедрил пользовательский listview, который отображает 3 textviews, добавил пользовательский адаптер моих рук, и все работает правильно, я выполнил registerForContextMenu (просмотр listview), и когда я нажимаю отображаемые элементы, он показывает идеальную синюю подсветку вокруг моего элемента, и когда я нажимаю его долго, происходит то же самое изатем он показывает мне меню. Хорошо. Затем я добавил кнопку внутри моего пользовательского listview, отображающую один цвет, если происходят определенные вещи, отображая другой наоборот. После того, как я изменил свой пользовательский адаптер, включив в него свою кнопку и установив логику изменения цвета, если я долго нажимаю на свои элементы, у меня больше нет подсветки, но контекстное меню сохраняется.

Почему это происходит?

Я много искал в Stack и Google, но каждое найденное мной решение не работало с моим приложением. Я также попытался вставить пользовательский селектор, он отлично работает, когда я исключаю кнопку из своего дизайна listview, я полагаю, что кнопка является виновником, но я не могу найти способ решить эту проблему. Я полагаю, это что-то связанное с «фоном» — «возможностью рисования» кнопки, но я здесь, чтобы попросить вас о помощи.

Заранее спасибо.

Некоторый код, если он может вас заинтересовать:

listviewdesign.xml:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

>
<TextView
    android:id="@ id/text1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_marginLeft="5dp"
    android:layout_centerVertical="true"
    android:gravity="center"
    />
<TextView
    android:id="@ id/text2"
    android:singleLine="false"
    android:maxEms="8"
    android:layout_width="80dp"
    android:layout_height="wrap_content"
    android:layout_marginLeft="25dp"
    android:layout_toLeftOf="@ id/text3"
    android:layout_toRightOf="@ id/text1"
    android:layout_centerVertical="true"
    android:gravity="center"
    />
<TextView
    android:id="@ id/text3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="25dp"
    android:layout_marginRight="5dp"
    android:layout_toLeftOf="@ id/btn1"
    />


<Button
    android:id="@ id/btn1"
    android:layout_width="10px"
    android:layout_height="10px"
    android:layout_alignParentRight="true"
    android:layout_marginTop="20dp"


    />
 </RelativeLayout>
 

mainactivitylayout.xml:

 <LinearLayout ...>
<ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@android:id/list"
        (when I add selector: android:listSelector="@xml/myselector")
        android:clickable="false"
        />
    </LinearLayout>
 

И мой селектор для полноты:

 <selector xmlns:android="http://schemas.android.com/apk/res/android"
class="class of project">
<item android:state_pressed="true"
    android:drawable="@drawable/pressed"/>
<item android:state_focused="true"
    android:drawable="@drawable/focused"/>
<item android:state_selected="false"
    android:state_pressed="false"
    android:drawable="@drawable/normal"/>
<item android:drawable="@drawable/normal"/>
</selector>
 

Где эти элементы для рисования правильно настроены, например:

 <resources>
<drawable name="pressed">#FF00A5FF</drawable>
<drawable name="focused">#FF0000FF</drawable>
<drawable name="normal">#00000000</drawable>
</resources>
 

Спасибо!

Ответ №1:

Вам нужно разместить «myselector.xml » в папке для рисования.

     android:listSelector="@xml/myselector" 
 

эта строка должна быть

     android:listSelector="@drawable/myselector"
 

Комментарии:

1. Я пытался, но это не сработало… Почему папка для рисования не подходит для хранения моего пользовательского селектора?

2. вы должны поместить свой myselector.xml в вашей папке для рисования. затем используйте приведенный выше код, тогда он будет работать.

3. Я пытался, но это не работает… Я думаю, что есть модификация интерактивной области: только в определенных точках она выделяет весь элемент, но если я нажимаю «случайно» в строке, она не работает (за исключением некоторых моментов: я специально заметил на пограничной строке между одним элементом и другим)

4. он также работает с myselector.xml файл внутри моей папки xml, это не проблема для моего проекта. Если я исключу кнопки из представления, он будет хорошо работать со всеми текстовыми представлениями, сколько угодно, это не имеет значения. Но если я вставлю одну кнопку, все элементы управления представлением будут изменены, и они больше не будут выделяться. Я думаю, что проблема находится внутри свойства view кнопки, но я не знаю, какой из них вызывает проблему. Есть предложения?

5. измените свои селекторы для рисования на селекторы цветов. Вы используете ресурсы цвета в качестве ресурсов для рисования.