군침이 싹 도는 코딩

Adapter 만드는 법 본문

Android

Adapter 만드는 법

mugoori 2023. 2. 1. 11:00
package com.mugoori.contactapp.adapter;

// 1. RecyclerView.Adapter 를 상속받는다

// 2. 상속받은 클래스가 abstract 이므로 unimplemented method override 한다

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.mugoori.contactapp.R;
import com.mugoori.contactapp.model.Contact;

import java.util.List;

// 6. RecyclerView.Adapter 의 데이터 타입을 적어주어야 한다
// 우리가 만든 viewHolder 로 적는다

// 7. 에러가 뜨면 우리가 만든 viewHolder 로
// onCreateViewHolder, onBindViewHolder 함수를 변경해준다
public class ContactAdapter extends RecyclerView.Adapter<ContactAdapter.viewHolder> {

    // 5. 어댑터 클래스의 멤버변수와 생성자를 만든다
    Context context;
    List<Contact> contactList;

    public ContactAdapter(Context context, List<Contact> contactList) {
        this.context = context;
        this.contactList = contactList;
    }

    // 8. 오버라이드 함수 3개를 구현해준다

    @NonNull
    @Override
    public ContactAdapter.viewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        // xml 파일을 연경하는 작업
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.contact_row,parent,false);
        return new ContactAdapter.viewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ContactAdapter.viewHolder holder, int position) {
        // 뷰에 데이터를 셋팅한다
        Contact contact = contactList.get(position);

        holder.txtName.setText( contact.name );
        holder.txtPhone.setText( contact.phone );
    }

    @Override
    public int getItemCount() {
        // 전체 데이터의 갯수를 적어준다
        return contactList.size();
    }

    // 3. viewHolder 클래스를 만든다
    // 이 클래스는 row.xml 화면에 있는 뷰를 연결 시키는 클래스다
    // RecyclerView.ViewHolder 상속 받는다

    // 4. 생성자를 만든다
    // 생성자에서 뷰를 연결시키는 코드를 작성하고 클릭 이벤트도 작성한다

    public class viewHolder extends RecyclerView.ViewHolder{

        TextView txtName;
        TextView txtPhone;
        ImageView imgDelete;

        public viewHolder(@NonNull View itemView) {
            super(itemView);
            txtName = itemView.findViewById(R.id.txtName);
            txtPhone = itemView.findViewById(R.id.txtPhone);
            imgDelete = itemView.findViewById(R.id.imgDelete);
        }
    }
}

# 어댑터를 만드는 순서는 다음과 같다

 

1. 먼저 어댑터를 만들기위해 RecyclerView.Adapter 를 상속받는다 

2. 해당 클래스를 상속받으면 3개의 메소드를 구현해야한다

3. viewHolder 라는 클래스를 만들어준다 ( viewHolder 클래스는 xml 화면에 뷰를 연결 시켜준다 )

4. RecyclerView.ViewHolder 라는 클래스를 상속받는다 ( 1개의 생성자를 만들어야한다 )

5. 어댑터 클래스의 멤버변수와 생성자를 만든다 

6. RecyclerView.Adapter 의 데이터 타입을 적어주어야 한다 ( 만든 viewHolder 로 적는다 )

 

 

7. 이때 에러가 뜨는데 상속받은 메소드에 클래스이름.viewHolder 로 바꿔준다

8. 오버라이드 함수 3개를 구현해준다

onCreateViewHolder 는 xml 파일을 연결한다 

이 작업은 MainActivity 에서 setContentView(R.layout.activity_main); 이것과같다

onBindViewHolder 에서는 뷰에 데이터를 셋팅한다

getItemCount 에 전체 데이터의 갯수를 적어준다

어레이 리스트.size() 를 이용한다