AdapterView

تجربة طريقة الإنشاء
Jetpack Compose هي مجموعة أدوات واجهة المستخدم المقترَحة لنظام التشغيل Android. تعرَّف على كيفية استخدام التنسيقات في Compose.

السمة AdapterView هي سمة ViewGroup تعرض السلع التي تم تحميلها في محوّل. يأتي نوع المحوّل الأكثر شيوعًا من مصدر بيانات مستند إلى صفيف.

يوضّح هذا الدليل كيفية إكمال عدة خطوات رئيسية ذات صلة بإعداد محوّل.

تعبئة التخطيط بالبيانات

لإضافة بيانات إلى التنسيق الذي تنشئه في واجهة مستخدم تطبيقك، أضِف رمزًا كما يلي:

Kotlin

val PROJECTION = arrayOf(Contacts.People._ID, People.NAME)
...

// Get a Spinner and bind it to an ArrayAdapter that
// references a String array.
val spinner1: Spinner = findViewById(R.id.spinner1)
val adapter1 = ArrayAdapter.createFromResource(
        this, R.array.colors, android.R.layout.simple_spinner_item)
adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
spinner1.adapter = adapter1

// Load a Spinner and bind it to a data query.
val spinner2: Spinner = findViewById(R.id.spinner2)
val cursor: Cursor = managedQuery(People.CONTENT_URI, PROJECTION, null, null, null)
val adapter2 = SimpleCursorAdapter(this,
        // Use a template that displays a text view
        android.R.layout.simple_spinner_item,
        // Give the cursor to the list adapter
        cursor,
        // Map the NAME column in the people database to...
        arrayOf(People.NAME),
        // The "text1" view defined in the XML template
        intArrayOf(android.R.id.text1))
adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
spinner2.adapter = adapter2

Java

// Get a Spinner and bind it to an ArrayAdapter that
// references a String array.
Spinner s1 = (Spinner) findViewById(R.id.spinner1);
ArrayAdapter adapter = ArrayAdapter.createFromResource(
    this, R.array.colors, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s1.setAdapter(adapter);

// Load a Spinner and bind it to a data query.
private static String[] PROJECTION = new String[] {
        People._ID, People.NAME
    };

Spinner s2 = (Spinner) findViewById(R.id.spinner2);
Cursor cur = managedQuery(People.CONTENT_URI, PROJECTION, null, null);

SimpleCursorAdapter adapter2 = new SimpleCursorAdapter(this,
    android.R.layout.simple_spinner_item, // Use a template
                                          // that displays a
                                          // text view
    cur, // Give the cursor to the list adapter
    new String[] {People.NAME}, // Map the NAME column in the
                                         // people database to...
    new int[] {android.R.id.text1}); // The "text1" view defined in
                                     // the XML template

adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s2.setAdapter(adapter2);

لاحظ أنه من الضروري أن يكون عمود People._ID في الإسقاط المستخدَم مع CursorAdapter وإلا ستحصل على استثناء.

إذا غيّرت خلال مدة تقديم طلبك البيانات الأساسية التي يقرأها المحوّل، عليك طلب notifyDataSetChanged(). سيؤدي هذا إلى إعلام العرض المرفق بأن البيانات قد تم تغييرها وأنه يجب إعادة تحميلها.

ملاحظة: في الإصدار 3.6 من "استوديو Android" والإصدارات الأحدث، يمكن لميزة ربط العرض استبدال طلبات findViewById()، كما توفّر أمان من نوع وقت التجميع للرموز البرمجية التي تتفاعل مع الملفات الشخصية. ننصحك باستخدام ربط الملف الشخصي بدلاً من findViewById().

التعامل مع اختيارات المستخدمين

ويمكنك التعامل مع اختيار المستخدم من خلال ضبط العضو AdapterView.OnItemClickListener في الصف على مستمع، واكتشاف التغييرات التي تم إجراؤها.

Kotlin

val historyView: ListView = findViewById(R.id.history)
historyView.onItemClickListener = AdapterView.OnItemClickListener { parent, view, position, id ->
    Toast.makeText(context, "You've got an event", Toast.LENGTH_SHORT).show()
}

Java

// Create a message handling object as an anonymous class.
private OnItemClickListener messageClickedHandler = new OnItemClickListener() {
    public void onItemClick(AdapterView parent, View v, int position, long id)
    {
        // Display a messagebox.
        Toast.makeText(context,"You've got an event",Toast.LENGTH_SHORT).show();
    }
};

// Now hook into our object and set its onItemClickListener member
// to our class handler object.
historyView = (ListView)findViewById(R.id.history);
historyView.setOnItemClickListener(messageClickedHandler);

لمزيد من المناقشة، راجع موضوع الدوار.