AdapterView

AdapterView는 어댑터에 로드된 항목을 표시하는 ViewGroup입니다. 가장 일반적인 어댑터 유형은 배열 기반 데이터 소스에서 가져옵니다.

이 가이드에서는 어댑터 설정과 관련된 몇 가지 주요 단계를 완료하는 방법을 설명합니다.

데이터로 레이아웃 채우기

앱 UI에서 만든 레이아웃에 데이터를 추가하려면 다음과 유사한 코드를 추가합니다.

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

자바

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

CursorAdapter와 함께 사용하는 투영에서 People._ID 열을 사용해야 합니다. 그렇지 않으면 예외가 발생합니다.

애플리케이션의 수명 동안 어댑터에서 읽은 기본 데이터를 변경하면 notifyDataSetChanged()를 호출해야 합니다. 연결된 뷰에 데이터가 변경되었으며 새로고침 해야 함을 알립니다.

참고: Android 스튜디오 3.6 이상에서 뷰 결합 기능은 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()
}

자바

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

자세한 내용은 스피너 주제를 참고하세요.