اكتشاف موضع التمرير داخل ListView (أو ScrollView)
-
20-09-2019 - |
سؤال
أقوم ببناء تطبيق غرفة الدردشة حيث يتم استطلاع الأحداث الجديدة لكل X Seconds. في كل مرة يحدث ذلك ، يقوم هذا الرمز بتحديث RoomAdapter (فئة فرعية مخصصة من ArrayAdapter) مع البيانات الجديدة وتمريرها إلى الأسفل:
RoomAdapter adapter = (RoomAdapter) getListAdapter();
for (int i=0; i<newEvents.size(); i++)
adapter.add(newEvents.get(i));
getListView().setSelection(events.size()-1);
هذا أمر جيد ، إلا أنه إذا كان المستخدم يمرل للنظر في تاريخ الغرفة ، فسوف يقفزها إلى أسفل عندما يحدث الاستطلاع. ما أود القيام به هو الحصول عليه بحيث إذا كان المستخدم بالفعل في أسفل القائمة ، فسيظل هناك بعد استطلاع للرأي لأحداث جديدة. إذا تم تمرير المستخدم عن عمد للأعلى ، فأود ألا ينزعج المستخدم.
كيف يمكنني اكتشاف عندما أقوم بالفعل بالتمرير إلى أسفل ListView؟
ملاحظة: لا يمكنني القيام بـ GetListView (). كما ملاحظة المستندات, ، استدعاء setSelection عندما لا يكون في وضع اللمس في الواقع تحديد العنصر ، ما عليك سوى التمرير إليه.
المحلول
لم أحاول هذا ، لكن ماذا عن getLastVisiblePosition()==getCount()-1
؟ (الأساليب على ListView
)
نصائح أخرى
لكن هذه ليست طريقة مناسبة.
يستخدم
• android:transcriptMode
- سلوك القائمة عندما يتغير المحتوى
- "معطل" ، لا تمرير
- "طبيعي" ، يلفت إلى الأسفل إذا كان العنصر الأخير مرئيًا
- "دائمًا"
• android:stackFromBottom
- مكدس العناصر بترتيب عكسي
- يبدأ بالعنصر الأخير من المحول
• مفيد للدردشات
- الرسائل ، والتحدث ، IRC ، إلخ.