سؤال

أقوم ببناء تطبيق غرفة الدردشة حيث يتم استطلاع الأحداث الجديدة لكل 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 ، إلخ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top