#android #android-gridview
#Android #android-gridview
Вопрос:
У меня есть представление сетки, которое я заполняю с помощью пользовательского адаптера. При заполнении gridview я присваиваю каждому элементу внутри уникального тега.
Как только этот gridview будет заполнен, я хочу найти определенный элемент внутри gridview с его тегом. Как мне это найти?
В настоящее время я делаю это:
gridviewobject.findViewById(thetag);
// gridview object is the object of the gridview that i have populated.
Комментарии:
1. Если объект не отображается на экране, то его view, вероятно, не существует — в этом случае вы не сможете получить ссылку на него. Что вы можете использовать, так это
getChildAt
в сочетании сgetFirstVisiblePosition
иgetChildCount
, чтобы определить, какие виды видны в данный момент и какой позиции соответствует каждый из них.2. не могли бы вы более подробно объяснить, что вы предлагаете.
Ответ №1:
То, что вы написали выше, сработает, за исключением того, что а) поиск представления по его тегу, вероятно, является самым медленным методом, который вы могли бы использовать для поиска представления, и б) если вы попытаетесь запросить представление с тегом, и это представление в данный момент не отображается, тогда вы получите null
.
Это потому, что GridView
перерабатывает свои представления, то есть, по сути, он создает только столько просмотров, сколько нужно для размещения на экране, а затем просто изменяет их положение и содержимое при прокрутке.
Возможно, лучшим способом было бы сделать
final int numVisibleChildren = gridView.getChildCount();
final int firstVisiblePosition = gridView.getFirstVisiblePosition();
for ( int i = 0; i < numVisibleChildren; i ) {
int positionOfView = firstVisiblePosition i;
if (positionOfView == positionIamLookingFor) {
View view = gridView.getChildAt(i);
}
}
По сути, findViewWithTag
делает нечто подобное, но вместо сравнения целых чисел сравнивает теги (что медленнее, поскольку они являются объектами, а не целыми числами)
Комментарии:
1. я искал тег, потому что я не знал точного местоположения представления, которое я пытаюсь найти внутри gridview. также, когда вид виден, и попробуйте найти представление по тегу, как я показал в вопросе, я все равно получаю null.
2. Если каждая уникальная позиция в GridView имеет уникальный тег, то, если вы знаете, какой тег вы ищете, вы также должны быть в состоянии определить, какую позицию вы ищете.
3. большое спасибо, код, который я просматривал, напрямую обращался к childAt (pos).. в результате layout null, ваш код работает отлично…