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

Обработка объектов в listview - Android

Войти
Регистрация
Восстановить пароль
 
THE_AHAPX
-1 / 1 / 0
Регистрация: 17.11.2013
Сообщений: 29
23.09.2014, 22:50     Обработка объектов в listview #1
Такая проблема... Хочу создать 50 строк в listview, в каждой строке по textview и button. Вопрос в том, как потом обрабатывать эти объекты. К примеру, как присвоить конкретному textview.settext или разные обработчики для button. Т.е. как выцепить id этих объектов, в какую сторону копать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2014, 22:50     Обработка объектов в listview
Посмотрите здесь:

Android listview и touch
Android Работа с Listview
Android spinner в ListView
Обработка свайпа в ListView Android
Кастомизация ListView Android
Android Обработка нажатия CheckBox в ListView
Android Прокрутка listview
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
24.09.2014, 09:31     Обработка объектов в listview #2
Это до отображения нужно или уже после?
DevExp
6 / 6 / 2
Регистрация: 27.05.2013
Сообщений: 59
24.09.2014, 09:40     Обработка объектов в listview #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
используй BaseAdapter

Добавлено через 6 минут
вот кусок от ExpandableListView переделаешь под себя
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
protected ExpListAdapter createAdapter() {
        Parcelable state = elvClients.onSaveInstanceState();
        
        ArrayList<HashMap<String, Object>> groups = ((OrdersEditor) getActivity()).alDictionaryClients;
        ArrayList<ArrayList<HashMap<String, Object>>> childs = ((OrdersEditor) getActivity()).alClientsChildList;
        ExpListAdapter adapter = new ExpListAdapter(getActivity(), groups, childs); 
        
        elvClients.onRestoreInstanceState(state);
                
        return adapter;
    }
    
    public class ExpListAdapter extends BaseExpandableListAdapter {
 
        private ArrayList<HashMap<String, Object>> mGroups;
        private ArrayList<ArrayList<HashMap<String, Object>>> mChilds;
        private Context mContext;
      
        public ExpListAdapter (Context context, ArrayList<HashMap<String,Object>> groups, ArrayList<ArrayList<HashMap<String, Object>>> childs){
            mContext = context;
            mGroups = groups;
            mChilds = childs;
        }
        
        @Override
        public int getGroupCount() {
            return mGroups.size();
        }
 
        @Override
        public long getGroupId(int groupPosition) {
            return groupPosition;
        }
 
        @Override
        public Object getGroup(int groupPosition) {
            return mGroups.get(groupPosition);
        }
        
        @Override
        public int getChildrenCount(int groupPosition) {
            return mChilds.get(groupPosition).size();
        }
 
        @Override
        public Object getChild(int groupPosition, int childPosition) {
            return mChilds.get(groupPosition).get(childPosition);
        }
 
        @Override
        public long getChildId(int groupPosition, int childPosition) {
            return childPosition;
        }
 
        @Override
        public boolean hasStableIds() {
            return true;
        }
 
        @Override
        public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
            if (convertView == null) {
                LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = inflater.inflate(R.layout.orderseditor_clients_group, null);
            }
            ...
 
            //здесь пропишешь кнопки            
            ImageButton btnInfo = (ImageButton) convertView.findViewById(R.id.btnInfo);
            btnInfo.setFocusable(false);
            btnInfo.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (elvClients.isGroupExpanded(groupPosition)) {
                        elvClients.collapseGroup(groupPosition);
                    } else {
                        elvClients.expandGroup(groupPosition);
                    }
                }
            });
            
            if ((groupPosition % 2) == 0) {
                convertView.setBackgroundResource(R.drawable._highlight_item_even);
            } else {
                convertView.setBackgroundResource(R.drawable._highlight_item_odd);
            }
 
            return convertView;
        }
 
        @Override
        public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
            if (convertView == null) {
                LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = inflater.inflate(R.layout.orderseditor_clients_child, null);
            }
        ...                             
            return convertView;
        }
 
        @Override
        public boolean isChildSelectable(int groupPosition, int childPosition) {
            return true;
        }
    }
THE_AHAPX
-1 / 1 / 0
Регистрация: 17.11.2013
Сообщений: 29
24.09.2014, 14:40  [ТС]     Обработка объектов в listview #4
Менять после отображения

Добавлено через 6 минут
Спасибо за пример, я еще в ступоре как эти кнопки создавать... Достаточно одной прописанной кнопки в layout? Или нужно создавать 50 кнопок?
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
24.09.2014, 14:41     Обработка объектов в listview #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от THE_AHAPX Посмотреть сообщение
Менять после отображения
Есть метод setOnItemClickListener() у ListView, в него при клике по элементу приходит и вьюшка на которую нажали и порядковый номер элемента. А там уж обычными способами меняйте.
DevExp
6 / 6 / 2
Регистрация: 27.05.2013
Сообщений: 59
24.09.2014, 14:43     Обработка объектов в listview #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
тебе надо создать xml в которой будет строка твоего listview
там будут TextView, Кнопки и тд.

смотри пример я там прописал как тебе запрограммировать кнопки в BaseAdapter в getGroupView
THE_AHAPX
-1 / 1 / 0
Регистрация: 17.11.2013
Сообщений: 29
24.09.2014, 15:04  [ТС]     Обработка объектов в listview #7
Всем спасибо, буду разбираться, отпишусь, если что

Добавлено через 11 минут
Т.е. если мне нужно обработать 50 кнопок, мне 50 кнопок создать в xml?
DevExp
6 / 6 / 2
Регистрация: 27.05.2013
Сообщений: 59
24.09.2014, 15:06     Обработка объектов в listview #8
нет - 1 кнопку в xml.
Напиши что хочешь получить
THE_AHAPX
-1 / 1 / 0
Регистрация: 17.11.2013
Сообщений: 29
24.09.2014, 15:15  [ТС]     Обработка объектов в listview #9
Ну я так понял, что в примере обработчик события привязан к одной кнопке, и в xml только одна кнопка.
Java
1
 ImageButton btnInfo = (ImageButton) convertView.findViewById(R.id.btnInfo)
Как тогда создать еще один обработчик события и привязать его к R.id.btnInfо, если в xml достаточно только одной кнопки?
Сорь, что туплю, в этой теме новичок.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.09.2014, 15:27     Обработка объектов в listview
Еще ссылки по теме:

Стиль ListView Android
Android Изменить ListView
ListView не работает Android
Fragment и ListView Android
ListView с датами Android

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

Или воспользуйтесь поиском по форуму:
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
24.09.2014, 15:27     Обработка объектов в listview #10
Очень просто: xml это просто разметка, не реальный элемент. Адаптер для ListView создает по этому шаблону кучу уже реальных элементов и присваивает каждому порядковый номер. Обработчик события нажатия на кнопку в элементе будет привязан к одной кнопке, да. Но при нажатии на кнопку в обработчик нажатия (OnClickListener) придет эта кнопка целиком. Можно например в адаптере навесить на каждую кнопку tag равный порядковому номеру всего элемента, и по нему идентифицировать кнопку.
Yandex
Объявления
24.09.2014, 15:27     Обработка объектов в listview
Ответ Создать тему
Опции темы

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