Android: доступ к дочерним представлениям из ListView
130804 просмотра
6 ответа
Мне нужно выяснить положение пикселя одного элемента в списке, который отображается с помощью ListView
. Кажется, что я должен получить один из TextView и затем использовать getTop()
, но я не могу понять, как получить дочернее представление a ListView
.
Обновление: дети ViewGroup
не соответствуют 1 к 1 с пунктами в списке, для a ListView
. Вместо этого ViewGroup
дети соответствуют только тем представлениям, которые видны прямо сейчас. Таким образом, getChildAt()
работает с индексом, который является внутренним по отношению к ViewGroup
и не обязательно имеет какое-либо отношение к позиции в списке, который ListView
использует.
Ответы (6)
215 плюса
См. Android ListView: получить индекс данных видимого элемента и объединить с частью ответа Фута выше, может дать вам что-то вроде:
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, что может привести к снижению производительности.
Автор: Joe Размещён: 20.04.2010 11:0117 плюса
Этот код проще в использовании:
View rowView = listView.getChildAt(viewIndex);//The item number in the List View
if(rowView != null)
{
// Your code here
}
Автор: Kalimah Apps
Размещён: 01.01.2012 08:20
6 плюса
Быстрый поиск документов для класса ListView выявил методы getChildCount () и getChildAt (), унаследованные от ViewGroup. Можете ли вы пройти через них, используя эти? Я не уверен, но стоит попробовать.
Нашел здесь
Автор: Feet Размещён: 02.11.2008 11:045 плюса
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 < count; i++) {
if (i != position) {
v = parent.getChildAt(i);
v.setBackground(res.getDrawable(R.drawable.not_clicked));
}
}
}
});
По сути, создайте два Drawables - один прозрачный, а другой желаемый цвет. Запросите фокусировку в выбранной позиции ( int position
как определено) и измените цвет указанной строки. Затем пройдитесь по родителю ListView
и измените все остальные строки соответственно. Это объясняет, когда пользователь нажимает listview
несколько раз. Это делается с помощью пользовательского макета для каждой строки в ListView
. (Очень просто, просто создайте новый файл макета с TextView
- не устанавливайте фокусируемый или кликабельный!).
Пользовательский адаптер не требуется - используйте ArrayAdapter
4 плюса
int position = 0;
listview.setItemChecked(position, true);
View wantedView = adapter.getView(position, null, listview);
Автор: Milaaaad
Размещён: 29.01.2016 08:11
-9 плюса
Это предполагает, что вы знаете положение элемента в ListView:
View element = listView.getListAdapter().getView(position, null, null);
Тогда вы сможете вызывать getLeft () и getTop (), чтобы определить элементы на экране.
Автор: jasonhudgins Размещён: 04.12.2008 02:08Вопросы из категории :
- android Насколько хорошо отражает эмулятор Android Phone?
- android Как сохранить состояние активности Android с помощью сохранения состояния экземпляра?
- android Android: доступ к дочерним представлениям из ListView
- android Как вызвать SOAP веб-сервис на Android
- android Как вы форматируете дату и время в Android?
- android Android: Получение имени файла с камеры?
- android Перезапуск активности при ротации Android
- android Проблема с нехваткой памяти при загрузке изображения в растровый объект
- android Отправьте приложение с базой данных
- android Как удалить контакт программно в Android
- android-listview Как обновить список рассылки Android?
- android-listview Как изменить цвет разделительной линии Android ListView?
- android-listview Как я могу поместить ListView в ScrollView без его разрушения?
- android-listview Как я могу обновить одну строку в ListView?
- android-listview Как реализовать Android Pull-to-Refresh
- android-listview Интервал между элементами ListView Android
- android-listview How to hide an item in a listview in Android
- android-listview Запрещение Android ListView занимать почти всю высоту экрана
- android-listview Android ListView с флажками: как захватить отмеченные элементы?