[Android] 안드로이드 Adapter와 AdapterView, BaseAdapter (1)

Android/Android · 2020. 6. 10. 18:43
반응형

https://survivalcoding.com/p/android_basic

 

될 때까지 안드로이드

될 때까지 안드로이드에 수록된 예제의 라이브 코딩 해설

survivalcoding.com

위 서적을 참고하였습니다.

 

 

 

 이번 포스트에선 안드로이드 Adapter와 AdapterView, BaseAdapter에 대해 알아보겠습니다.

 

 먼저 Adapter란 데이터와 View(ListView, GridView 등)를 연결짓는 하나의 다리 역할을 하는 객체입니다. 일종의 데이터(Array, List, DB, Provider 등)를 받아 관리하고,  AdapterView로 출력할 수 있는 형태로 만들어 주는 것Adapter입니다. Adapter의 종류에 대해 대표적으로 3개를 말해보자면 ArrayAdapter(List), CursorAdapter(DB), SimpleAdapter(다른 것들에 비해 확장성 낮음)가 있습니다.

 

 그 다음, AdapterView입니다. 앞서 설명드렸던 것과 같이 Adapter가 데이터를 받아 AdapterView에 출력할 수 있도록 데이터를 저장하고 가공하는 중간다리 역할을 하는 것이면, AdapterView는 Adapter가 관리하는 데이터를 출력할 수 있게해주는 View입니다.

 

 AdapterView의 특징 중 하나가 ScrollView는 모든 내용이 미리 로드되어 있어야 하지만, AdapterView는 화면에 보이는 내용만 로딩을 할 수 있고, layout을 재사용할 수 있습니다. 재사용한다는 것은 layout객체를 다른 객체에 저장을 시켜둔 다음 화면에 보여야할 때 다시 꺼내오는 기법을 사용합니다. 이는 Holder를 이용해 구현 할 수 있습니다. 또한, layout을 재사용하는 것이아닌, 계속 새롭게 그리기 로딩을 한다면 비용(시간, 부하)가 상당히 많이 듭니다. 그렇기 때문에 AdapterView를 사용하고 Holder를 이용해 비용을 줄이는 기법을 많이 사용합니다.

 

 이제 간단한 AdapterView를 만들어 보겠습니다. 먼저 activity_main.xml입니다.

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ListView
        android:id="@+id/list_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>

 activity_main.xml에선 ListView하나를 match_parent로 생성을 해주었습니다.

 

 

MainActivity.java

package hello.world.study_adapter;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    ArrayList<String> arrayList;
    ArrayAdapter arrayAdapter;
    ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        arrayList = new ArrayList<>();
        //Adapter생성
        arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, arrayList);

        listView = (ListView) findViewById(R.id.list_view);
        //ListView에 Adapter연결
        listView.setAdapter(arrayAdapter);

        for(int i=0; i<30; i++) {
            arrayList.add("Item " +i);
        }

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(MainActivity.this, position+ "번째 Item", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

 

 

 

 MainActivity.java입니다. 여기선 ArrayList를 생성하고, ArrayAdapter에 ArrayList를 지정해준 다음, ListView에 ArrayAdapter를 연결시켜 줍니다. 그 다음 for()문을 돌려서 총 30개의 객체를 만들어 주시고, ListView의 항목들이 클릭이 되었을 때 Toast를 출력하는 간단한 앱을 만들어 보았습니다. 다음은 결과물입니다.

 

 

 

결과물

 

 보시는 바와 같이 정상적으로 출력되는 것을 볼 수 있습니다. 

 

 하지만 뭔가 좀 허전해보이지 않나요? 다른 사람들은 막

 

 

 

 이렇게 레이아웃에 사진도 넣고,

 

 

 

 스위치나 레이아웃 모양을 나타내는데 이건 어떻게 하는지 궁금하실 수 있습니다. 이는 다음 포스트 내용인 BaseAdapter를 배우면 사용할 수 있습니다. 일단 여기서 한 번 끊고, 다음 포스트에서 BaseAdapter에 대해 공부해 보겠습니다. 감사합니다.

 

 

 

 

 

반응형