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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
#1

Не обрабатывается клик по позиции ListView - Программирование Android

22.11.2012, 22:41. Просмотров 1665. Ответов 19
Метки нет (Все метки)

Создан листвью через симпладаптер. В основе лежит лайот с двумя текстовыми полями. Кликаю по позиции в списке, а идешка кликнутой позиции соответствует ЛинерЛайоту, а не текствью. Вроде взял разбирать работающий пример, никак не пойму.

Java
1
2
3
4
5
6
7
8
9
10
11
12
// создаем адаптер
        SimpleAdapter sa = new SimpleAdapter(this, data, R.layout.item, from, to);
 
        // определяем список и присваиваем ему адаптер
        lv = (ListView)findViewById(R.id.lvSimple);
        lv.setAdapter(sa);
 
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View itemClicked, int position, long id) {
                Toast.makeText(MainActivity.this, String.valueOf(itemClicked.getId()), Toast.LENGTH_SHORT).show();
            }
        });
data - это new ArrayList<Map<String, Object>>(); наполненный данными из БД.

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
29
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
 
    <TextView
        android:id="@+id/txtDate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="left"
        android:layout_marginLeft="20dp"
        android:text="@string/hello_world"
        android:textColor="#0000FF" >
 
    </TextView>
 
    <TextView
        android:id="@+id/txtComment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="left"
        android:layout_marginLeft="20dp"
        android:text="@string/hello_world" >
 
    </TextView>
 
</LinearLayout>
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2012, 22:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не обрабатывается клик по позиции ListView (Программирование Android):

Клик по айтему элемента ListView - Программирование Android
Добрый день товарищи. Есть необходимость отследить нажатие на элемент элемента ListView, извиняюсь за тавтологию. Вот пока лишь...

Клик по кнопке в элементе listView - Программирование Android
Доброго времени суток. Пишу свое первое приложение под андроид. На данный момент получаю листвью, в каждом поле которого отображаются 4...

Восстановление позиции ListView по возвращении из другого Activity - Программирование Android
Доброго времени суток. Имеется activity с ListView, заполняемого из базы данных. При нажатии элемента идёт переход на новое активити с...

Почему не обрабатывается клик? - jQuery
Приветствую. Есть 2 кнопки с одинаковым id &lt;tr&gt; &lt;td width=&quot;50%&quot; align=&quot;center&quot;&gt; &lt;button id=&quot;NextButton&quot; value=&quot;1&quot;&gt;Назад&lt;/button&gt; ...

ListView - клик по Item.SubItems - Delphi
На скриншоте видно, нужно сдлать возможность клика и редактирования СУБОБЪЕКТА

.NET 4.x Клик по ListView и обработка выделенного - Visual Basic .NET
Всем здравствовать!!! Есть ListView, кликаю по элементу в нем получаю его значение: Private Sub ListView1_MouseClick(sender As...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
23.11.2012, 00:19 #2
а в чем вопрос?
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
23.11.2012, 13:06  [ТС] #3
Вопрос в том, как мне получить значение (текстовое) нажатого элемента. В уроках, коих много в инете, там это делается именно через View itemClicked, где itemClicked это нажатый TextView, и из него получают текст, а у меня получается что я нажимаю на Layout, а не на TextView. Конечно можно данные из БД записать в массив, потом этот массив поместить в адаптер, а потом по выбранному ид получить значение, но мне кажется, что тут есть лишняя операция. Хотелось бы сразу получать данные.

Добавлено через 4 часа 24 минуты
Короче данные получил таким образом:
Java
1
2
3
4
5
6
7
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View itemClicked, int position, long id) {
                Map<?, ?> m = data.get(position);
                Object[] val = m.values().toArray();
                Toast.makeText(MainActivity.this, val[1].toString(), Toast.LENGTH_SHORT).show();
            }
        });
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
23.11.2012, 22:19 #4
Java
1
2
LinearLayout layout = (LinearLayout )itemClicked;
textView = layout .findViewById(R.id.txtDate);
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
23.11.2012, 23:15  [ТС] #5
Подскажите еще, а есть ли какие либо скрытые поля? Например для хранения служебной информации?
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
23.11.2012, 23:25 #6
где поля? какой еще служебной информации?
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
24.11.2012, 14:27  [ТС] #7
Ну например при клике на позиции в листвью я хотел бы получить ид записи и уже все данные получать непосредственно из БД. Так вот, чтобы хранить этот ид я бы записал его в тот же TextView с visible=false, но мне кажется у него такого св-ва нет
YAUHEN
146 / 128 / 6
Регистрация: 29.07.2008
Сообщений: 506
24.11.2012, 14:54 #8
Я бы вам посоветовал не путать назначения элементов. Если вам надо получать текстовое значение - то вы должны брать его из вашего набора данных по позиции. а не искать вьюшку. Для этого переопределите какой нибудь адаптер. Посмотрите как это делается в примерах. Если вам надо дапустим изменять как то отображение информации - вот тогда уже надо работать с View.
Всё что вам надо - сделать свой адаптер унаследовавшись от андройдовского. Переопределить getItem getView getCount. Держать в адаптере ваш надбор данных. Получая клик мы получите позицию и сможете получить элемент.
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
24.11.2012, 20:44  [ТС] #9
YAUHEN, спасибо за совет, прекрасно понимаю, что вы все верно говорите, но применить никак не могу. Вот банальный пример: есть список состоящий допустим из одного текстового поля и некоего признака по которому этот текст нужно например "жирнить". Всякое попробовал и ViewBinder переопределял и в адаптере setTextValue обрабатывал, никак не пойму как мне по значению одного элемента изменить значение другого Подскажите, а

Добавлено через 2 часа 16 минут
Цитата Сообщение от YAUHEN Посмотреть сообщение
Держать в адаптере ваш набор данных
А вот это я не понял. Как в адаптере держать набор данных. Переопределил getView и getItem но не понимаю, зачем они мне getView по ходу вызывается при построении списка, так?
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
24.11.2012, 21:58 #10
примерно так
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
SimpleAdapter sa = new SimpleAdapter(this, data, R.layout.item, from, to){
                       public View getView (int position, View convertView, ViewGroup parent) {
                             View v =   super.getView (position, convertView, parent);
                              v.setTag(userId);
                              return v;
                   }
};
 
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View itemClicked, int position, long id) {
                String userId = (String)itemClicked.getTag();
            }
        });
Добавлено через 29 минут
ну а сам id в адаптере вытянуть примерно так
Java
1
2
3
4
5
6
...
View v =   super.getView (position, convertView, parent);
Map<String, ?> item = getItem(position);
userId  = item.get(...
v.setTag(userId);
...
эта часть не полная, так как вы не дали полный код...
YAUHEN
146 / 128 / 6
Регистрация: 29.07.2008
Сообщений: 506
24.11.2012, 22:37 #11
допустим так.
Вложения
Тип файла: zip testnewl.zip (904.0 Кб, 11 просмотров)
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
26.11.2012, 14:37  [ТС] #12
YAUHEN, а почему у вас в примере идентификатор для TextView назначен как @android:id/text1, а не просто @+id/text1?
YAUHEN
146 / 128 / 6
Регистрация: 29.07.2008
Сообщений: 506
26.11.2012, 14:50 #13
а почему бы и нет
как хотите так и делайте.
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
26.11.2012, 15:06  [ТС] #14
Получился глюк. Покрасил некоторые позиции по определенному значению (true/false). Но при пролистывании ListView произвольно начинают закрашиваться другие позиции или стираться...к чему бы это???
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
26.11.2012, 19:42 #15
Цитата Сообщение от dubok79 Посмотреть сообщение
к чему бы это???
Java
1
2
3
4
if(convertView == null){
       ....
} 
определить состояние;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2012, 19:42
Привет! Вот еще темы с ответами:

Клик по ListView загружаю картинку в PictureBox - C#
Здравствуйте помогите решить все что в инете нашел особо не помогло необходимо при нажатии на елемент в ListView чтобы он отобразился в...

Клик на элемент ListView отображение в pictureBox - C#
Всем привет. Прошу помочь с вопросом отображения информации в picBox при клике на элемент ListView. Задача написать программу типа...

Как в ListView поймать клик по элементу? - C#
Привет! Кто сталкивался с таким, подскажите. У меня на форме ListView с отображением Detail. Не могу поймать событие, когда...

ListView как узнать в каком столбце клик мышкой - Visual Basic .NET
Как отследить в каком столбце на какой строке клик. Добавлено через 15 минут И попутно... А картинки в иных столбцах - не...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.11.2012, 19:42
Ответ Создать тему
Опции темы

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