Форум программистов, компьютерный форум, киберфорум
Наши страницы
Xamarin
Войти
Регистрация
Восстановить пароль
 
Nikfel
56 / 28 / 14
Регистрация: 30.05.2009
Сообщений: 158
#1

Как получить правильную позицию в ListView в GetView адаптера? - Xamarin

24.04.2017, 12:42. Просмотров 461. Ответов 3
Метки нет (Все метки)

Я создал список ListView с SeekBar, но когда ловлю событие ProgressChanged в адаптере:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public override View GetView(int position, View convertView, ViewGroup parent)
{
  listViewHolder holder = null;
  if (convertView == null)
    {
      convertView = mInflater.Inflate(Resource.Layout.myListPresets, null);
      holder = new listViewHolder();
 holder.seekBarVol.ProgressChanged += (sender, e) =>
                {
Toast.MakeText(activity, position.ToString(), ToastLength.Short).Show();
};
convertView.Tag = holder;
   } else {holder = convertView.Tag as listViewHolder;}
...
то изменение ловится не того элемента в списке, особенно это заметно когда список занимает место больше экрана. Как правильно извлекать позицию элемента при изменении ползунка SeekBar?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2017, 12:42
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как получить правильную позицию в ListView в GetView адаптера? (Xamarin):

Xamarin.Android Адаптер и GetView
Всем доброго времени суток. Пишу на Xamarin.Android(Mono) Написал BaseAdapter...

Получить позицию курсора в поле Entry
Добрый день! Имеется поле для ввода Entry. Хочу сделать кнопки перемещения...

Resources$NotFoundException при вызове getView адаптера
Доброго вечера. Есть адаптер для ListView, который находится в активити. При...

Получить из ListView адаптера значение в OnItemClickListener
В OnItemClickListener передается заполненый адаптер и номер позиции. Как...

Как отключить обновление адаптера ListView при прокрутке?
Всем привет! имеется листвью, туда я загружаю собственный адаптер и...

Как получить значение из состояния сетевого адаптера
Как получить значение из состояния сетевого адаптера из vb.net OS Win10

3
Nikfel
56 / 28 / 14
Регистрация: 30.05.2009
Сообщений: 158
24.04.2017, 13:42  [ТС] #2
Это ксамарин. На андроид студио примерно также делается. Мне бы пример хоть под андроид студио, хоть под Xamarin найти как правильно получать позицию элемента.

Добавлено через 39 минут
Вроде так заработало:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public override View GetView(int position, View convertView, ViewGroup parent)
{
  listViewHolder holder = null;
  if (convertView == null)
    {
      convertView = mInflater.Inflate(Resource.Layout.myListPresets, null);
      holder = new listViewHolder();
 holder.seekBarVol.ProgressChanged += (sender, e) =>
                {
var poldel = (int)((sender as SeekBar).Tag);
Toast.MakeText(activity, poldel.ToString(), ToastLength.Short).Show();
};
convertView.Tag = holder;
holder.seekBarVol.Tag = position;
   } else {holder = convertView.Tag as listViewHolder;}
Добавлено через 10 минут
Нормально всё работает. Пришлось использовать свойство Tag объекта для хранения в нём позиции. Тогда позиция верно извлекается. Сейчас хоть понял как создавать сложный список в ListView. Можно закрывать тему.
0
vxg
Модератор
3230 / 2033 / 319
Регистрация: 13.01.2012
Сообщений: 7,885
24.04.2017, 14:00 #3
Nikfel, getView получает именно тот position который соответствует реальному, не знаю почему у вас туда приходит что то другое - GetView отвечает за создание или повторное использование view - в обоих случаях содержимое необходимо устанавливать заново (случай с повторным использованием отличается только тем что мы имеем сам объект, однако его содержимое может быть устаревшим и не соответствовать той позиции которая реально затребована). под фразой содержимое имеется ввиду в том числе и тег. если вы пишите в тег позицию не забывайте о том что происходит с позициями при удалении элементов.
1
Nikfel
56 / 28 / 14
Регистрация: 30.05.2009
Сообщений: 158
02.05.2017, 12:51  [ТС] #4
vxg, getView получает всё правильно, но когда внутри списка лежат SeekBar-ры то их нужно обрабатывать в отдельном событии, в которое уже не приходит информация о позиции. Этот способ работы со списком ListView обнаружил на одном иностранном сайте с исходниками. Просто сразу не понял для чего это используется такая запись в Tag и по началу я её игнорировал. Сейчас понял для чего это нужно. На счет удаления элементов - спасибо за замечание, буду учитывать.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2017, 12:51
Привет! Вот еще темы с решениями:

Неадекватное поведение адаптера ListView
Собственно есть кастом-адаптер. В него приходят два массива с данными. В dates...

Как получить текущую скорость приема/передачи сетевого адаптера?
Всем привет! Никак не могу найти решение для данного вопроса. Как получить реал...

Не выводиться информация в ListView с использованием адаптера
У меня есть три класса:t_table, List_Time_Table, and TimeAdapter. Суть в том,...

С помощью адаптера добавить два xml-я в listView
Есть два .xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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