본문 바로가기

▶Programming/Android

어댑터(Adapter)에 대해서

가장 먼저 알아야 하는 내용은 아래 그림이다.

위의 그림은 뷰의 계층 구조를 나타낸다. 여기서 우리들이 주로 쓰는 ListView나 GridView를 주목하자.


ListView가 AdapterView를 상속하고 있다. 다시 말하자면 ListView는 껍데기고 실제는 AdapterView 라는 의미다.


위의 내용을 이해 못했으면 그냥 외우자. ListView는 껍데기고 실제는 AdapterView다.


이제 본론을 얘기해보자. 우리가 안드로이드 프로그래밍에서 사용하고 싶은 기능이 GridView라고 하자.


근데 위에서 GridView는 껍데기라 아무 기능이 없다. 그럼 실제 기능은 AdapterView를 사용해야 한다.


그런데 AdapterView를 사용하려면 Adapter라는 녀석이 필요하다.


쉬운 이해를 위해 설명하자면 하나의 화면 = Xml + Activity(자바코드) 이듯, 화면 = AdapterView + Adapter이다.


아래 그림은 이러한 어댑터의 계층구조를 나타낸다.



이걸 한줄의 코드로 정리하자면 아래와 같다.


1
2
3
4
5
6
7
8
9
10
11
12
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
 
    GridView gridView=(GridView)findViewById(R.id.gridView);//사용할 GridView id로 찾음
 
    GridViewAdapter adapter=new GridViewAdapter();//adapter를 만듬. 실제로 class로 만들어야 함. 
 
    gridView.setAdapter(adapter); //그리드뷰에 어뎁터 설정!
 
}
cs


아래는 클래스로 따로 만든 나만의 어댑터이다. (어댑터는 상속 받아서 직접 만들어야 한다)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class GridViewAdapter extends BaseAdapter{
    String[] alphabet={"A","B","C","D","E","F","G","H","I","J","K","L","M","N",
                        "O","P","Q","R","S","T","U","V","W","X","Y","Z"};
 
    @Override
    public int getCount() { //데이터 개수
        return alphabet.length;
    }
 
    @Override
    public Object getItem(int position) {//데이터 리턴 여기서 position은 index를 뜻함.
        return alphabet[position];
    }
 
    @Override
    public long getItemId(int position) {
//데이터 아이디 index를 아이디로 하면 되니까 return position으로..
        return position;
    }
 
    //★★★★★ 실제로 화면으로 보여주게해주는 녀석
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //xml에서 추가 말고 코드상에서도 추가 가능. 아래와 같이..
        TextView view=new TextView(getApplicationContext());
        view.setText(alphabet[position]); //view에 알파벳 0번째 부터 설정!
        view.setTextSize(40.0f);
        return view; //리턴되는 객체가 각각의 아이템(데이터)으로 보이게 된다.
    }
}

cs



정리! 리스트뷰 나 그리드뷰 같은 뷰들 중 몇몇은 어댑터뷰를 상속하고 있기 때문에 직접 사용이 불가능하다.


따라서 어댑터라는 녀석을 가지고 데이터 입력, 삭제 등의 관리를 해야한다.


어댑터는 필요에 따라 맞는 어댑터를 상속받아 직접 만들어야 하며, 마지막에 뷰(리스트뷰, 그리드 뷰, ETC)와 연결하면 끝!