كيفية العثور على عنصر داخل عرض الشبكة في Android؟
-
12-11-2019 - |
سؤال
لدي طريقة عرض الشبكة التي أقوم بملءها باستخدام محول مخصص.أثناء ملء عرض الشبكة، أعطي كل عنصر داخل علامة فريدة.
بمجرد ملء طريقة عرض الشبكة هذه، أرغب في العثور على عنصر محدد داخل طريقة عرض الشبكة مع علامتها.كيف أجد هذا؟
حاليا أفعل هذا:
gridviewobject.findViewById(thetag);
// gridview object is the object of the gridview that i have populated.
المحلول
ما كتبته أعلاه سيعمل، باستثناء أن تدرك أن أ) البحث عن عرض بواسطة علامته ربما يكون أبطأ طريقة يمكنك استخدامها للعثور على عرض و ب) إذا حاولت طلب عرض باستخدام علامة وهذا العرض ليس كذلك مرئية حاليا، فإنك سوف تحصل 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
يفعل شيئًا مشابهًا، ولكن بدلاً من مقارنة الأعداد الصحيحة، فإنه يقارن العلامات (وهو أمر أبطأ نظرًا لأنها كائنات وليست ints)