Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
PeterBox
0 / 0 / 0
Регистрация: 08.02.2013
Сообщений: 8
#1

ListView: подсветка выбранного элемента

03.08.2013, 17:23. Просмотров 4473. Ответов 7
Метки нет (Все метки)

В активити есть несколько списков со своей разметкой.
Пересмотрел кучу примеров, но у самого что-то не получается оставить после нажатия подсвеченым элемент ListView.
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
......
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_zakaz_item);
.....    
        katItemList = new ArrayList<HashMap<String, String>>();
        ListView lv = (ListView) findViewById(R.id.list_kat);
        lv.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                ListView lv = (ListView) findViewById(R.id.list_kat);
                lv.setItemChecked(position, true);
                                // setItemChecked отрабатывает
                Log.d("lv.getCheckedItemPosition", lv.getCheckedItemPosition()+"");
 
            }
        });
.......
        //данные для списка получаются после запроса
        protected void onPostExecute(String file_url) {
 
            // updating UI from Background Thread
            runOnUiThread(new Runnable() {
                public void run() {
....
                    ListAdapter adapter1 = new SimpleAdapter(ZakazItem.this,
                            katItemList, R.layout.list_kat, new String[] {
                                    TAG_ID,TAG_KT_ID, TAG_KT_NAME },
                            new int[] { R.id._id, R.id.kt_id, R.id.kt_name });
                    // updating listview
 
                    ListView listView1 = (ListView) findViewById(R.id.list_kat);
                    listView1.setAdapter(adapter1);
                    listView1.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
 
                }
            });
        }


часть разметки активити
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >
 
    <ListView
        android:id="@+id/list_kat"
        android:layout_width="145dp"
        android:layout_height="match_parent"
 
    </ListView>
 
</LinearLayout>


разметка списка:
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:weightSum="5" 
    android:background="@drawable/list_kat_background">
 
        <TextView
            android:id="@+id/_id"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:visibility="gone" />
        <TextView
            android:id="@+id/kt_id"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:visibility="gone" />
          
            <TextView
                android:id="@+id/kt_name"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:paddingLeft="6dip"
                android:paddingTop="6dip"
                android:textSize="14dip" />
 
</LinearLayout>


разметка list_kat_background
XML
1
2
3
4
5
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/redColor" android:state_checked="true" />  
    <item android:drawable="@color/greenColor" android:state_pressed="true"/>
 </selector>
Подскажите, что я пропустил?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.08.2013, 17:23
Ответы с готовыми решениями:

ListView подсветка выделенного пункта
Всем доброго времени суток! Понимаю, вопрос нубский, но никак не получается...

Изменил фон для Custom ListView не работает подсветка при нажатии
Для каждого четного Custom ListView устанавливаю цвет фона : if ((position %...

Узнать порядковый номер выбранного элемента
Добавляю заранее неизвестное количество Radio Button в Radio Group. Добавляю...

выделение элемента в ListView
Подскажите, что я делаю не так? У меня в кастомном диалоге создается и...

Замена элемента в ListView
Доброго времени суток, форумчане! Столкнулся с проблемой есть ListView у...

7
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
03.08.2013, 18:02 #2
Java
1
2
3
4
5
6
7
8
// Tell the list view to show one checked/activated item at a time.
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
 
 @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        // Make the newly clicked item the currently selected one.
        getListView().setItemChecked(position, true);
    }
0
PeterBox
0 / 0 / 0
Регистрация: 08.02.2013
Сообщений: 8
03.08.2013, 18:57  [ТС] #3
У меня активити не на базе ListActivity, соответственно getListView отсутствует. Надо создать свой адаптер и определить в нем getView?
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
03.08.2013, 19:04 #4
нужно просто использовать ListView, неважно каким способом вы его достаете.
0
PeterBox
0 / 0 / 0
Регистрация: 08.02.2013
Сообщений: 8
03.08.2013, 19:13  [ТС] #5
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
у меня:
Java
1
2
3
                  ListView listView1 = (ListView) findViewById(R.id.list_kat);
                    listView1.setAdapter(adapter1);
                    listView1.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
getListView().setItemChecked(position, true);
у меня:
Java
1
2
ListView lv = (ListView) findViewById(R.id.list_kat);
                lv.setItemChecked(position, true);
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
03.08.2013, 19:29 #6
вот и разобрались.
0
PeterBox
0 / 0 / 0
Регистрация: 08.02.2013
Сообщений: 8
03.08.2013, 19:34  [ТС] #7
да, но не работает Изначально код и был таким. В логе вижу, что после клика - getCheckedItemPosition() изменился, но но цвет айтема не меняется...
это работает:
XML
1
<item android:drawable="@color/greenColor" android:state_pressed="true"/>
это не работает:
XML
1
<item android:drawable="@color/redColor" android:state_checked="true"/>
0
PeterBox
0 / 0 / 0
Регистрация: 08.02.2013
Сообщений: 8
05.08.2013, 19:06  [ТС] #8
Пришлось переопределить адаптер и в нем getView. Только так заработало выделение.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Override
        public View getView(int position, View convertView, ViewGroup parent){
            View row = super.getView(position, convertView, parent);
            if (row == null) {
                LayoutInflater mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                row = mInflater.inflate(R.layout.list_kat, parent, false);
                }
            
            final ListView lv = (ListView) parent;
            if(position == lv.getCheckedItemPosition()){
                                // цвет выбранного элемента
                    row.setBackgroundColor(0xFF0000FF);
                } else {
                                // старая разметка, где работает только state_pressed
                    row.setBackgroundResource(R.drawable.list_kat_background);
                }
           return row;
        }
Добавлено через 4 часа 47 минут
опять непонятки
этот код работает:
Java
1
2
// цвет выбранного элемента
                    row.setBackgroundColor(0xFF0000FF);
а это нет:
Java
1
2
// цвет выбранного элемента
                    row.setBackgroundColor(R.color.whiteColor);
И ошибок нет в логе.
0
05.08.2013, 19:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.08.2013, 19:06

Скрытие элемента ListView
Заполняю своим адаптером, унаследованным от BaseAdapter. В качестве item...

Оформление элемента списка ListView
Здравствуйте. Подскажите, как можно добиться результата, показанного на рисунке...

ListView не работает выбор элемента
Доброго времени суток. Который день мучаюсь. Не знаю как поменять цвет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru