لماذا لا يتم استدعاء onItemSelectedListener الخاص بي في ListView؟

StackOverflow https://stackoverflow.com/questions/2454337

سؤال

أنا أستخدم ListView الذي تم إعداده على النحو التالي:

<ListView android:id="@android:id/list" android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:longClickable="false"
    android:choiceMode="singleChoice">
</ListView>

في الكود الخاص بي أقوم بإضافة OnItemSelectedListener إلى ListView مثل هذا:

getListView().setAdapter(adapter);
getListView().setOnItemSelectedListener(this);

يقوم نشاطي بتنفيذ المستمع على النحو التالي:

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    Log.d("Tag", "ListItemSelected: Parent: " + parent.toString() + " View: "
            + view.toString() + " Position: " + " Id: " + id);
}

كان أملي أن أرى مخرجات التصحيح هذه في اللحظة التي أنقر فيها على شيء ما في القائمة.لكن إخراج التصحيح لا يظهر أبدًا في LogCat.

هل كانت مفيدة؟

المحلول

OnItemSelectedListener يستمع لتحديدات قائمة البند وليس قائمة نقرات البند.

ويمكن أن ينظر إلى الاختيار في هذه الحالة كما نقل التركيز على هذا البند مع لوحة التتبع للجهاز.

لتحصل على سلوك واحد يريد يجب أن تستخدم OnItemClickListener .

نصائح أخرى

وانها لأنك يحدث أن اختبار بأصابعك على جهاز تمكين اللمس. في ، ليس هناك التركيز وعدم التحديد. معهد اليونسكو للإحصاء أن اختيار الحاجة يجب استخدام نوع مختلف من القطعة، مثل أزرار الراديو.

في البداية، يجب عليك تعيين ChoiceMode،وثم،في ListView، لن يتم قبول الحدث المحدد لأنه setOnItemSelectedListener مسجل في AdapterView، ورد الاتصال في الطريقة handleDataChanged()، ولكن الطبقة AbsListView تجاوز هذه الطريقة ولا ترد الاتصال مطلقًا OnItemSelectedListener

enter image description here

يمكنك الحصول على seletedItem بهذه الطريقة setOnItemClickListener

     mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Log.e("TAG", "onItemClick: " + position);
            SparseBooleanArray positions = mListView.getCheckedItemPositions();
            Log.e("TAG", "onItemSelected: " + positions.toString());

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