AdapterView

امتحان کردن روش Compose
Jetpack Compose جعبه‌ابزار واسط کاربر توصیه‌شده برای Android است. با نحوه کار با چیدمان‌ها در Compose آشنا شوید.

AdapterView یک ViewGroup است که موارد بارشده در یک آداپتور را نمایش می‌دهد. رایج‌ترین نوع آداپتور از منبع داده مبتنی بر آرایه می‌آید.

این راهنما نشان می‌دهد که چگونه چند مرحله کلیدی مربوط به راه‌اندازی آداپتور را تکمیل کنید.

پر کردن طرح‌بندی با داده‌ها

برای افزودن داده به چیدمانی که در میانای کاربری برنامه‌تان ایجاد می‌کنید، کدی مشابه کد زیر اضافه کنید:

کاتلین

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

جاوا

// 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() را فراخوانی کنید. این کار به «نمای» پیوست‌شده اطلاع می‌دهد که داده‌ها تغییر کرده‌اند و باید خودش را بازآوری کند.

توجه: با Android Studio نسخه ۳.۶ و بالاتر، ویژگی view binding می‌تواند جایگزین findViewById() calls شود و ایمنی تایپی زمان ترجمه را برای کدی که با نماها تعامل دارد فراهم کند. بهتر است به‌جای findViewById() از اتصال نما استفاده کنید.

رسیدگی به انتخاب‌های کاربر

با تنظیم عضو AdapterView.OnItemClickListener کلاس روی شنونده و دریافت تغییرات انتخاب، انتخاب کاربر را مدیریت می‌کنید.

کاتلین

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()
}

جاوا

// 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);

برای بحث بیشتر، به موضوع Spinner مراجعه کنید.