Выделить ListView выбранной строки - PullRequest
37 голосов
/ 20 февраля 2011

У меня есть список альбомов (несколько сотен).Когда я касаюсь выбранного альбома, я хочу предложить пользователю выбрать воспроизведение всего альбома или переход на его дорожку ListView.Нет проблем.Однако после прикосновения к ablum в albumListView я хочу, чтобы строка оставалась выделенной, чтобы пользователь знал, на какой элемент он щелкнул, и затем может перейти к OK или PLAY.Как выделить строку в ListView?

Ответы [ 12 ]

1 голос
/ 30 июня 2015

В моем случае при использовании simple_list_item_2 единственным решением было переопределить метод getView () адаптера и просто изменить цвет фона вручную:

listview = new SimpleAdapter(ctx, data,
                android.R.layout.simple_list_item_2, res,
                new String[] {"field1", "field2" },
                new int[] {android.R.id.text1, android.R.id.text2 })

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                View view = super.getView(position, convertView, parent);

                if (this_is_the_selected_item)
                {
                    view.setBackgroundColor(0xff999999);
                }
                else
                {
                    view.setBackgroundColor(Color.BLACK);
                }
                return view;
            }
        };

Не забудьте вызвать listview.invalidateViews () каждый раз, когда вы меняете выбранный элемент.

0 голосов
/ 08 августа 2013

Вот что я сделал :) - после сильного удара головой о стену.

Для адаптера:

 radioAdapter = new RadioAdapter(context, R.layout.row_layout, yourData);

Для row_layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/radio_name"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center_vertical"
android:padding="10dp"
android:background="?android:attr/activatedBackgroundIndicator"
android:clickable="true"
android:text="SOME RADIO"
android:textColor="@color/Gray"
android:textSize="25dp" />

Чтобы установить положение по умолчанию для выделения, просто сделайте это для вашего объекта listView:

radioTitleList.setItemChecked (defaultPosition, true);

Если вы хотитевыделение при нажатии на список:

В вашем getView () в адаптере пользовательского списка добавьте это перед возвратом представления:

 row.setOnClickListener(new OnClickListener() 
 {
 @Override
 public void onClick(View arg0) 
 {
     radioTitleList.setItemChecked(position, true);
             // other stuff like navigating to a new activity etc
     }
 });
...