Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.86
PeterBox
0 / 0 / 0
Регистрация: 08.02.2013
Сообщений: 8
#1

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

03.08.2013, 17:23. Просмотров 3676. Ответов 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>
Подскажите, что я пропустил?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
03.08.2013, 18:02     ListView: подсветка выбранного элемента #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);
    }
PeterBox
0 / 0 / 0
Регистрация: 08.02.2013
Сообщений: 8
03.08.2013, 18:57  [ТС]     ListView: подсветка выбранного элемента #3
У меня активити не на базе ListActivity, соответственно getListView отсутствует. Надо создать свой адаптер и определить в нем getView?
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
03.08.2013, 19:04     ListView: подсветка выбранного элемента #4
нужно просто использовать ListView, неважно каким способом вы его достаете.
PeterBox
0 / 0 / 0
Регистрация: 08.02.2013
Сообщений: 8
03.08.2013, 19:13  [ТС]     ListView: подсветка выбранного элемента #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);
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
03.08.2013, 19:29     ListView: подсветка выбранного элемента #6
вот и разобрались.
PeterBox
0 / 0 / 0
Регистрация: 08.02.2013
Сообщений: 8
03.08.2013, 19:34  [ТС]     ListView: подсветка выбранного элемента #7
да, но не работает Изначально код и был таким. В логе вижу, что после клика - getCheckedItemPosition() изменился, но но цвет айтема не меняется...
это работает:
XML
1
<item android:drawable="@color/greenColor" android:state_pressed="true"/>
это не работает:
XML
1
<item android:drawable="@color/redColor" android:state_checked="true"/>
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.08.2013, 19:06     ListView: подсветка выбранного элемента
Еще ссылки по теме:

ListView ячейки, получить Id элемента из SQLite Android
Изменил фон для Custom ListView не работает подсветка при нажатии Android
Зафиксировать пзицию элемента в ListView Android
Android Переход с элемента listView на activity
Android Оформление элемента списка ListView

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

Или воспользуйтесь поиском по форуму:
PeterBox
0 / 0 / 0
Регистрация: 08.02.2013
Сообщений: 8
05.08.2013, 19:06  [ТС]     ListView: подсветка выбранного элемента #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);
И ошибок нет в логе.
Yandex
Объявления
05.08.2013, 19:06     ListView: подсветка выбранного элемента
Ответ Создать тему
Опции темы

Текущее время: 16:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru