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);
자세한 내용은 스피너 주제를 참고하세요.