Урок 44. События в ListView
Re: Урок 44. События в ListView
В общем, я покопался, дело в кнопке. Не знаю почему, но он как-то перехватывает нажатия и мешает слушателю элемнтов списка. Если вместо кнопки ставить TextView или совсем её убирать, то всё начинает работать как надо.
Re: Урок 44. События в ListView
Спасибо за ответ!
Я так и не понял, почему если ставить кнопочку не работает( Буду рыть дальше, может найду чего!
Если кто столкнётся напишите объяснение плиз)
Я так и не понял, почему если ставить кнопочку не работает( Буду рыть дальше, может найду чего!
Если кто столкнётся напишите объяснение плиз)
Re: Урок 44. События в ListView
чего не понятного, если существуют одинаковые события у ребёнка и родителя, то перехватываться они будут родителем, до ребёнка не дойдёт, вот такая дедовщина =)
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 44. События в ListView
А почему тогда такое же событие на ImageView отрабатывает нормально?
И кстати почему кнопочка это родитель, а сам элемент списка потомок?
И кстати почему кнопочка это родитель, а сам элемент списка потомок?
Re: Урок 44. События в ListView
Да. Я бы понял, если бы ListItem перехватывал события кнопки. А тут наоборот кнопка не даёт элементу списка обработать нажатие.
Re: Урок 44. События в ListView
Заметил странный глюк eсlipse : убирает старые импорты такие как интент заменяя новыми при ctrl+shift+o.
короче пришлось копипастить из примера урока импорты без автоподставновки
короче пришлось копипастить из примера урока импорты без автоподставновки
Re: Урок 44. События в ListView
По уроку "OnItemClickListener – обрабатывает нажатие на пункт списка. Предоставляет нам метод onItemClick(AdapterView<?> parent, View view, int position, long id)"
Скажите, как мне в listview при заполнении данными вложить к каждому item свой id, который я смог бы прочитать в onItemClick?
У меня listview заполняется из базы данных и при нажатии пункта нужно знать именно id.
Скажите, как мне в listview при заполнении данными вложить к каждому item свой id, который я смог бы прочитать в onItemClick?
У меня listview заполняется из базы данных и при нажатии пункта нужно знать именно id.
Re: Урок 44. События в ListView
long id - это и есть id из бдigrok-vip писал(а):По уроку "OnItemClickListener – обрабатывает нажатие на пункт списка. Предоставляет нам метод onItemClick(AdapterView<?> parent, View view, int position, long id)"
Скажите, как мне в listview при заполнении данными вложить к каждому item свой id, который я смог бы прочитать в onItemClick?
У меня listview заполняется из базы данных и при нажатии пункта нужно знать именно id.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 44. События в ListView
Это я понял, но как их туда положить при заполнении адаптера? Ведь мы туда передаём только массив данных(список данных) и layout для item'a. А как передать ещё и id?
А, всё, понял. Там несколько конструкторов для адаптера)
А, всё, понял. Там несколько конструкторов для адаптера)
Re: Урок 44. События в ListView
Блин не понял таки) Скажите какой конструктор выбирать и в каком виде туда передать id шки? Сейчас они у меня в ArrayList. Или всё-таки как-то по другому?
Re: Урок 44. События в ListView
для работы с базой и отображения её в листе лучше использовать simplecursoradapter, тогда и id будет автоматом подстраиватьсяigrok-vip писал(а):Блин не понял таки) Скажите какой конструктор выбирать и в каком виде туда передать id шки? Сейчас они у меня в ArrayList. Или всё-таки как-то по другому?
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
-
- Сообщения: 7
- Зарегистрирован: 16 июн 2013, 16:02
Re: Урок 44. События в ListView
Здравствуйте!
Осваиваю Андроид, попутно пишу рабочее приложение. Встала проблема, которую как-то удалось решить, но не уверена, что найденное решение оптимально. Прошу помощи у зала - посоветуйте, подскажите, если есть более разумные способы решить задачу.
Итак, задача:
Android 2.3.3. MainActivity (TabActivity) + энное количество вкладок, на каждой из которых есть кнопки и свой ListView с кастомным адаптером (от BaseAdapter) и большим количеством элементов с чекбоксами. Поскольку кнопки должны отрабатывать действия по всем выделенным элементам списка, даже скрытым, пришлось создавать View для каждого элемента каждого списка.
Нужно реализовать реакцию по кликам на элементах списка. Для разных списков это будет вызов разных Activity (описание элементов в разных форматах). Но Слушатель для элементов списка отключается при наличии в слое кнопок - конфликтует со слушателями кнопок. Пробовала назначать слушателя кнопкам через наследование интерфейса, через создание в Activity, через onClick в XML - не работает. Убираешь кнопки - все отлично.
Удалось выкрутиться правкой биндера списка, код ниже (пока с единым слушателем для всех списков). Но при этом мало того, что для всех позиций создается куча вьюшек, так еще и появляется куча одинаковых объектов слушателей - по одному на каждый элемент каждого списка.
Подозреваю, что при больших списках (пока тестирую на паре десятков позиций, но будут сотни) приложение будет жрать память и сильно тормозить. Так ли это? И если да - как выкрутиться?
Осваиваю Андроид, попутно пишу рабочее приложение. Встала проблема, которую как-то удалось решить, но не уверена, что найденное решение оптимально. Прошу помощи у зала - посоветуйте, подскажите, если есть более разумные способы решить задачу.
Итак, задача:
Android 2.3.3. MainActivity (TabActivity) + энное количество вкладок, на каждой из которых есть кнопки и свой ListView с кастомным адаптером (от BaseAdapter) и большим количеством элементов с чекбоксами. Поскольку кнопки должны отрабатывать действия по всем выделенным элементам списка, даже скрытым, пришлось создавать View для каждого элемента каждого списка.
Нужно реализовать реакцию по кликам на элементах списка. Для разных списков это будет вызов разных Activity (описание элементов в разных форматах). Но Слушатель для элементов списка отключается при наличии в слое кнопок - конфликтует со слушателями кнопок. Пробовала назначать слушателя кнопкам через наследование интерфейса, через создание в Activity, через onClick в XML - не работает. Убираешь кнопки - все отлично.
Удалось выкрутиться правкой биндера списка, код ниже (пока с единым слушателем для всех списков). Но при этом мало того, что для всех позиций создается куча вьюшек, так еще и появляется куча одинаковых объектов слушателей - по одному на каждый элемент каждого списка.
Подозреваю, что при больших списках (пока тестирую на паре десятков позиций, но будут сотни) приложение будет жрать память и сильно тормозить. Так ли это? И если да - как выкрутиться?
Код: Выделить всё
@Override
public View getView(int position, View convertView, ViewGroup parent) {
view = lInflater.inflate(R.layout.item_check, parent, false);
final Story itemStory = getStory(position);
((TextView) view.findViewById(R.id.tvName)).setText(itemStory.getName());
((TextView) view.findViewById(R.id.tvDate)).setText(itemStory.getDate());
CheckBox cbCheck = (CheckBox) view.findViewById(R.id.chkStory);
cbCheck.setOnCheckedChangeListener(myCheckChangList);
cbCheck.setTag(position);
cbCheck.setChecked(itemStory.isChecked());
if (itemStory.isDownloaded()) cbCheck.setEnabled(false);
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ctx, PreviewActivity.class);
intent.putExtra("name", itemStory.getName());
intent.putExtra("date", itemStory.getDate());
intent.putExtra("annotation", itemStory.getAnnotation());
ctx.startActivity(intent);
}
});
return view;
}
-
- Сообщения: 7
- Зарегистрирован: 16 июн 2013, 16:02
Re: Урок 44. События в ListView
Хм... Это как-то не согласуется с моими (порядком устаревшими, впрочем) представлениями о распределении памяти в ООП.rezak90 писал(а):нет)Так ли это?
Т.е. вполне себе нормальное решение?
Re: Урок 44. События в ListView
Анна, а причем здесь ООП? вы же про списки сказали? у них устройство такое, что в памяти будет находиться лишь то, что на экране плюс пара строк в кеше - все.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
-
- Сообщения: 7
- Зарегистрирован: 16 июн 2013, 16:02
Re: Урок 44. События в ListView
Мне казалось, что это справедливо, только если мы не создаем вьюшки на каждый элемент, а используем уже созданные (те, что отображаются на экране). У меня создается их столько, сколько элементов в списке - сотня, две, а то и больше. И на каждую вьюшку через new создается свой слушатель как новый объект.Foenix писал(а):Анна, а причем здесь ООП? вы же про списки сказали? у них устройство такое, что в памяти будет находиться лишь то, что на экране плюс пара строк в кеше - все.
Я пока не разбиралась внутренней кухней Андроида, поэтому и обратилась за помощью к знающим людям - я зря паникую или не зря?
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 44. События в ListView
Анна, мой вам совет, постарайтесь вынести все действия при нажатии на элемент в отдельный и метод и вызывать его, без создания View.
Естественно, дабы не плодить кучу одинакового кода, этот метод стоит вызывать и при нажатии на элемент.
Естественно, дабы не плодить кучу одинакового кода, этот метод стоит вызывать и при нажатии на элемент.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 44. События в ListView
Код: Выделить всё
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ctx, PreviewActivity.class);
intent.putExtra("name", itemStory.getName());
intent.putExtra("date", itemStory.getDate());
intent.putExtra("annotation", itemStory.getAnnotation());
ctx.startActivity(intent);
}
});
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 44. События в ListView
Здравствуйте, после ознакомления с уроком возник такой вопрос.
Имеется ListView. Элемент списка описан так:
Исходя из
В моем примере, view у меня указывает на LinearLayout, а как заглянуть глубже, сделать этот LinearLayout прозрачным, что-ли?..
Имеется ListView. Элемент списка описан так:
Код: Выделить всё
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tvText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/tvText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
можно ли в методе onItemClick как-то получить идентификатор именно того TextView (в строке элемента списка), на котором было нажатие?...метод onItemClick(AdapterView<?> parent, View view, int position, long id), где
parent – View-родитель для нажатого пункта, в нашем случае - ListView
view – это нажатый пункт, в нашем случае – TextView из android.R.layout.simple_list_item_1
position – порядковый номер пункта в списке
id – идентификатор элемента,
В моем примере, view у меня указывает на LinearLayout, а как заглянуть глубже, сделать этот LinearLayout прозрачным, что-ли?..
Re: Урок 44. События в ListView
Т.е. элементы списка состоят не просто из TextView, а из LinearLayout который внутри себя содержит TextView?ligaron писал(а):Здравствуйте, после ознакомления с уроком возник такой вопрос.
В таком случае необходимо задать TextView какой-то ID в xml файле, и потом получить это TextView можно методом view.findViewById(R.id.my_id);
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.