Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/12: Рейтинг темы: голосов - 12, средняя оценка - 4.92
325 / 123 / 10
Регистрация: 01.11.2012
Сообщений: 586
1

Не обрабатывается клик по позиции ListView

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

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

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>
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.11.2012, 22:41
Ответы с готовыми решениями:

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

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

Клик по ListView и обработка выделенного
Всем здравствовать!!! Есть ListView, кликаю по элементу в нем получаю его значение: Private...

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

19
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
23.11.2012, 00:19 2
а в чем вопрос?
0
325 / 123 / 10
Регистрация: 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();
            }
        });
0
1162 / 986 / 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);
1
325 / 123 / 10
Регистрация: 01.11.2012
Сообщений: 586
23.11.2012, 23:15  [ТС] 5
Подскажите еще, а есть ли какие либо скрытые поля? Например для хранения служебной информации?
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
23.11.2012, 23:25 6
где поля? какой еще служебной информации?
0
325 / 123 / 10
Регистрация: 01.11.2012
Сообщений: 586
24.11.2012, 14:27  [ТС] 7
Ну например при клике на позиции в листвью я хотел бы получить ид записи и уже все данные получать непосредственно из БД. Так вот, чтобы хранить этот ид я бы записал его в тот же TextView с visible=false, но мне кажется у него такого св-ва нет
0
146 / 129 / 6
Регистрация: 29.07.2008
Сообщений: 506
24.11.2012, 14:54 8
Я бы вам посоветовал не путать назначения элементов. Если вам надо получать текстовое значение - то вы должны брать его из вашего набора данных по позиции. а не искать вьюшку. Для этого переопределите какой нибудь адаптер. Посмотрите как это делается в примерах. Если вам надо дапустим изменять как то отображение информации - вот тогда уже надо работать с View.
Всё что вам надо - сделать свой адаптер унаследовавшись от андройдовского. Переопределить getItem getView getCount. Держать в адаптере ваш надбор данных. Получая клик мы получите позицию и сможете получить элемент.
1
325 / 123 / 10
Регистрация: 01.11.2012
Сообщений: 586
24.11.2012, 20:44  [ТС] 9
YAUHEN, спасибо за совет, прекрасно понимаю, что вы все верно говорите, но применить никак не могу. Вот банальный пример: есть список состоящий допустим из одного текстового поля и некоего признака по которому этот текст нужно например "жирнить". Всякое попробовал и ViewBinder переопределял и в адаптере setTextValue обрабатывал, никак не пойму как мне по значению одного элемента изменить значение другого Подскажите, а

Добавлено через 2 часа 16 минут
Цитата Сообщение от YAUHEN Посмотреть сообщение
Держать в адаптере ваш набор данных
А вот это я не понял. Как в адаптере держать набор данных. Переопределил getView и getItem но не понимаю, зачем они мне getView по ходу вызывается при построении списка, так?
0
1162 / 986 / 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);
...
эта часть не полная, так как вы не дали полный код...
1
146 / 129 / 6
Регистрация: 29.07.2008
Сообщений: 506
24.11.2012, 22:37 11
допустим так.
Вложения
Тип файла: zip testnewl.zip (904.0 Кб, 14 просмотров)
1
325 / 123 / 10
Регистрация: 01.11.2012
Сообщений: 586
26.11.2012, 14:37  [ТС] 12
YAUHEN, а почему у вас в примере идентификатор для TextView назначен как @android:id/text1, а не просто @+id/text1?
0
146 / 129 / 6
Регистрация: 29.07.2008
Сообщений: 506
26.11.2012, 14:50 13
а почему бы и нет
как хотите так и делайте.
0
325 / 123 / 10
Регистрация: 01.11.2012
Сообщений: 586
26.11.2012, 15:06  [ТС] 14
Получился глюк. Покрасил некоторые позиции по определенному значению (true/false). Но при пролистывании ListView произвольно начинают закрашиваться другие позиции или стираться...к чему бы это???
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
26.11.2012, 19:42 15
Цитата Сообщение от dubok79 Посмотреть сообщение
к чему бы это???
Java
1
2
3
4
if(convertView == null){
       ....
} 
определить состояние;
0
325 / 123 / 10
Регистрация: 01.11.2012
Сообщений: 586
26.11.2012, 20:46  [ТС] 16
V0v1k, прошу прощения, но я вас не понял
0
146 / 129 / 6
Регистрация: 29.07.2008
Сообщений: 506
26.11.2012, 20:48 17
это к тому что андройд ресайклит вьюшки если вы используете адаптер вью. таким обрасзом вам конвернт вью может приходить не нулевой. и если вы допустим только зажирнили текст, подёргали лист туда сюда - вам будут приходить конвертвью с зажирёнными текствью и жирность надо обратно убирать если она там не нужна:

if(item.isWasAssingned()){
holder.fName.setTypeface(Typeface.DEFAULT_BOLD, Typeface.BOLD);
holder.sName.setTypeface(Typeface.DEFAULT_BOLD, Typeface.BOLD);
}else{
holder.fName.setTypeface(Typeface.DEFAULT_BOLD, Typeface.NORMAL);
holder.sName.setTypeface(Typeface.DEFAULT_BOLD, Typeface.NORMAL );
}
1
325 / 123 / 10
Регистрация: 01.11.2012
Сообщений: 586
26.11.2012, 21:45  [ТС] 18
YAUHEN, да уже заметил, сделал else и все сработало. Спасибо за подсказки и пример.
0
146 / 129 / 6
Регистрация: 29.07.2008
Сообщений: 506
26.11.2012, 21:46 19
ну а вообще проёб мой, постоянно забываю про это
0
325 / 123 / 10
Регистрация: 01.11.2012
Сообщений: 586
26.11.2012, 21:53  [ТС] 20
Цитата Сообщение от YAUHEN Посмотреть сообщение
ну а вообще проёб мой, постоянно забываю про это
не забыли бы, я бы не узнал о таком свойства дроида ... в жизни бы не догадался, что такое может быть
0
26.11.2012, 21:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.11.2012, 21:53
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru