커스텀 어뎁터 CustomAdapter

INI-K (이니케이)·2021년 7월 24일
0

Android_Basic

목록 보기
15/19

Custom Adapter

  • 리스트뷰를 사용할 때 특별한 기능을 추가해서 만들고 싶다면 Adapter 클래스를 직접 만들어 사용하면 된다.

  • Adapter 클래스를 만들 때는 BaseAdapter 클래스를 상속받아 작성한다.


메서드

  • getCount : 리스트뷰 내의 전체 항목의 개수를 반환한다.

  • getView : 리스트 뷰 항목 하나를 구성하여 반환한다.


Adapter를 만들어 사용할 때는 BaseAdapter를 상속받아 필요한 기능을 구현하여 사용한다.

package com.androidbasic.a17customadapter;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    //리스트 항목에 설정한 문자열 배열
    String [] data = {
        "데이터1","데이터2","데이터3","데이터4","데이터5","데이터6"
    };
    //뷰의 주소값을 담을 참조변수
    ListView listView;
    TextView textView;

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

        //뷰의 주소값을 담는다
        listView = (ListView)findViewById(R.id.list1);
        textView = (TextView)findViewById(R.id.textView2);

        //어뎁터 세팅한다.
        ListAdapter listAdapter = new ListAdapter();
        listView.setAdapter(listAdapter);
    }
    class ListAdapter extends BaseAdapter{

        BtnListener listener = new BtnListener();

        @Override
        //리스트 뷰의 항목 개수를 반환하는 메서드
        public int getCount() {
            return data.length;
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            //재사용 가능한 뷰가 없다면 뷰를 만들어준다.
            if(convertView == null){
                LayoutInflater inflater =getLayoutInflater();
                convertView = inflater.inflate(R.layout.row,null);
            }

            //뷰를 구성한다.
            TextView sub_text = (TextView)convertView.findViewById(R.id.textView);
            Button sub_btn1 = (Button)convertView.findViewById(R.id.button);
            Button sub_btn2 = (Button)convertView.findViewById(R.id.button2);

            sub_btn1.setOnClickListener(listener);
            sub_btn2.setOnClickListener(listener);

            //버튼에 인덱스 값을 저장한다.
            sub_btn1.setTag(position);
            sub_btn2.setTag(position);

            sub_text.setText(data[position]);

            //뷰를 반환한다.
            return convertView;
        }
    }
    //항목에 배치된 버튼에 세팅할 리스너
    class BtnListener implements View.OnClickListener{
        @Override
        public void onClick(View v) {
            //버튼 아이디 추출
            int id = v.getId();

            //리스트의 인덱스 값을 추출한다.
            int position = (int) v.getTag();

            switch (id){
                case  R.id.button:
                    textView.setText("첫 번째 버튼을 눌렀습니다 : " + position);
                    break;
                case R.id.button2 :
                    textView.setText("두 번째 버튼을 눌렀습니다 : " + position);
           }
        }
    }
}

실습 Git

profile
긍정적인 개발자를 꿈꾸는 김태환입니다.

0개의 댓글

관련 채용 정보