AdjustView

אפשר לנסות את הדרך של כתיבת הודעה
‫Jetpack Compose היא ערכת הכלים המומלצת לבניית ממשק משתמש ב-Android. איך עובדים עם פריסות בכתיבת אימייל

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(). הפעולה הזו תשלח הודעה לתצוגה המצורפת שהנתונים השתנו ושהיא צריכה לרענן את עצמה.

הערה: ב-Android Studio 3.6 ואילך, התכונה view binding יכולה להחליף קריאות ל-findViewById() ולספק מניעת שגיאות הקלדה בזמן קומפילציה לקוד שמתקשר עם תצוגות. מומלץ להשתמש ב-view binding במקום ב-findViewById().

טיפול בבחירות של משתמשים

כדי לטפל בבחירה של המשתמש, צריך להגדיר את AdapterView.OnItemClickListener member של המחלקה כמאזין ולתפוס את השינויים בבחירה.

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

מידע נוסף מופיע בנושא גלגל מסתובב.