Форум программистов, компьютерный форум, киберфорум
Наши страницы

Xamarin

Войти
Регистрация
Восстановить пароль
 
Nikfel
56 / 28 / 5
Регистрация: 30.05.2009
Сообщений: 156
#1

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

24.04.2017, 12:42. Просмотров 360. Ответов 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
Всем доброго времени суток. Пишу на Xamarin.Android(Mono) Написал BaseAdapter для ListView, в ListView через адаптер помещается...

Получить из ListView адаптера значение в OnItemClickListener - Программирование Android
В OnItemClickListener передается заполненый адаптер и номер позиции. Как вытянуть из него значение объекта ? public void...

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

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

Неадекватное поведение адаптера ListView - Программирование Android
Собственно есть кастом-адаптер. В него приходят два массива с данными. В dates находится даты в формате "29.05.15". В photos ссылки на...

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

3
Nikfel
56 / 28 / 5
Регистрация: 30.05.2009
Сообщений: 156
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
Модератор
3181 / 1984 / 226
Регистрация: 13.01.2012
Сообщений: 7,669
24.04.2017, 14:00 #3
Nikfel, getView получает именно тот position который соответствует реальному, не знаю почему у вас туда приходит что то другое - GetView отвечает за создание или повторное использование view - в обоих случаях содержимое необходимо устанавливать заново (случай с повторным использованием отличается только тем что мы имеем сам объект, однако его содержимое может быть устаревшим и не соответствовать той позиции которая реально затребована). под фразой содержимое имеется ввиду в том числе и тег. если вы пишите в тег позицию не забывайте о том что происходит с позициями при удалении элементов.
1
Nikfel
56 / 28 / 5
Регистрация: 30.05.2009
Сообщений: 156
02.05.2017, 12:51  [ТС] #4
vxg, getView получает всё правильно, но когда внутри списка лежат SeekBar-ры то их нужно обрабатывать в отдельном событии, в которое уже не приходит информация о позиции. Этот способ работы со списком ListView обнаружил на одном иностранном сайте с исходниками. Просто сразу не понял для чего это используется такая запись в Tag и по началу я её игнорировал. Сейчас понял для чего это нужно. На счет удаления элементов - спасибо за замечание, буду учитывать.
0
02.05.2017, 12:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2017, 12:51
Привет! Вот еще темы с ответами:

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

С помощью адаптера добавить два xml-я в listView - Программирование Android
Есть два .xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ...

Как получить позицию курсора? - C++ WinAPI
Собственно как получить позицию курсора. Например я в Edit ввожу 123, и ставлю курсор (для дальнейшего редактирования между 1 и 2). Как мне...

Как получить позицию курсора в Memo? - Delphi
Есть задача: в мемо несколько строк кликнуть в строку и удалить именно её Казалось бы задача тривиальна, но.. примеры из сети на ХЕ8...


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

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

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