Android: доступ к дочерним представлениям из списка ListView

Мне нужно выяснить положение пикселя одного элемента в списке, который был отображен с помощью ListView . Кажется, я должен получить один из TextView, а затем использовать getTop() , но я не могу понять, как получить дочерний вид ListView .

Обновление: дети ViewGroup не соответствуют 1-к-1 с элементами в списке для ListView . Вместо этого дети ViewGroup соответствуют только тем представлениям, которые видны прямо сейчас. Таким образом, getChildAt() работает с индексом, который является внутренним для ViewGroup и не обязательно имеет какое-либо отношение к позиции в списке, который использует ListView .

Смотрите: Android ListView: получить индекс данных видимого элемента и объединить с частью ответа Feet выше, может дать вам что-то вроде:

 int wantedPosition = 10; // Whatever position you're looking for int firstPosition = listView.getFirstVisiblePosition() - listView.getHeaderViewsCount(); // This is the same as child #0 int wantedChild = wantedPosition - firstPosition; // Say, first visible position is 8, you want position 10, wantedChild will now be 2 // So that means your view is child #2 in the ViewGroup: if (wantedChild < 0 || wantedChild >= listView.getChildCount()) { Log.w(TAG, "Unable to get view for desired position, because it's not being displayed on screen."); return; } // Could also check if wantedPosition is between listView.getFirstVisiblePosition() and listView.getLastVisiblePosition() instead. View wantedView = listView.getChildAt(wantedChild); 

Преимущество в том, что вы не выполняете итерации над детьми ListView, что может привести к поражению производительности.

Этот код проще в использовании:

  View rowView = listView.getChildAt(viewIndex);//The item number in the List View if(rowView != null) { // Your code here } 

Быстрый поиск документов для classа ListView показал методы getChildCount () и getChildAt (), унаследованные от ViewGroup. Можете ли вы перебирать их через них? Я не уверен, но это стоит попробовать.

Найди его здесь

 listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, final View view, int position, long id) { View v; int count = parent.getChildCount(); v =parent.getChildAt(position); parent.requestChildFocus(v, view); v.setBackground(res.getDrawable(R.drawable.transparent_button)); for (int i=0; i 

В принципе, создайте две чертежи - прозрачную, а другую - желаемый цвет. Запросить фокус в нажатой позиции (позиция int как определено) и изменить цвет указанной строки. Затем пройдите через родительский список и соответствующим образом измените все остальные строки. Это объясняется тем, что пользователь несколько раз нажимает на список. Это делается с помощью настраиваемого макета для каждой строки в listview . (Очень простой, просто новый файл макета с textview - не устанавливайте фокусируемое или кликабельное!) Нет необходимости в настраиваемом адаптере - используйте адаптер массива

 int position = 0; listview.setItemChecked(position, true); View wantedView = adapter.getView(position, null, listview); 

Предполагается, что вы знаете позицию элемента в ListView:

  View element = listView.getListAdapter().getView(position, null, null); 

Затем вы должны иметь возможность вызвать getLeft () и getTop () для определения элементов на экране.

  • Как выделить строку в ListView в Android?
  • Как изменить цвет линии разделителя Android ListView?
  • Как реализовать поиск в CustomListView на основе classа classа POJO в Android?
  • При проверке флажка в listview также проверяются другие случайные флажки
  • Android: кнопка «Радио» в пользовательском списке
  • Удалить элементы ListView на Android
  • Преобразование JSONarray в ArrayList
  • Android получает точную позицию прокрутки в ListView
  • Цвет монитора ListView для Android
  • Отображение текущего выбора в списке
  • Как получить выбранные элементы из списка Multi Select List
  • Interesting Posts

    Являются ли массивы переданы по значению или переданы по ссылке в Java?

    Почему я получаю сообщение об ошибке «(304)« Не изменено »на некоторых ссылках при использовании HttpWebRequest?

    JButton ActionListener – обновление GUI только после нажатия JButton

    Шаблон Java Regex, который соответствует любому онлайн-тестеру, но не в Eclipse

    Почему у explorer.exe установлено установленное соединение с сервером Microsoft?

    Получить Dingbats, чтобы появиться в Firefox 3?

    Ярлык для блокировки экрана

    Как использовать регулярные выражения (регулярное выражение) в Microsoft Excel как внутри ячейки, так и в цикле

    Ионная ошибка при создании Android при загрузке Gradle

    Возвращает локальную строку как срез (& str)

    Быстрое решение для алгоритма суммирования подмножества Pisinger

    Поиск подстроки в объекте NSString

    Перенаправление отправляет меня на ту же страницу, когда я нажимаю «Назад»,

    Производительность Cellfun и Simple Matlab Loop

    Как добавить дополнительные пространства имен в страницы Razor вместо @using объявления?

    Давайте будем гением компьютера.