Как найти элемент внутри gridview в Android?

#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, ваш код работает отлично…