본문 바로가기
  • 콩's 코딩노트
Android

Android Studio - RecycleView와 Adapter를 이용하여 리스트를 화면에 표시하는 방법

by Cong_S 2022. 7. 14.

조금 복잡하므로 작업 순서와 (작업 클래스 또는 액티비티) 로 설명하려한다.

 

1. 새로운 자바 클래스 생성, RecyclerView 상속

RecyclerView.Adapter 로 변경.

빨간줄 확인하고 unimplemented method 3개 다 만들기

 

public class ContactAdapter extends RecyclerView.Adapter<ContactAdapter.ViewHolder> {

    @NonNull
    @Override
    public  RecyclerView.Adapter onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    }

    @Override
    public void onBindViewHolder(@NonNull  RecyclerView.Adapter holder, int position) {

    }

    @Override
    public int getItemCount() {

    }

 

2. 클래스 안쪽에 ViewHolder 클래스 만들기

3. 생성자 안에다가 연결시키는 코드 작성

// 2. ViewHolder 클래스를 만든다.
   
    public class ViewHolder extends  RecyclerView.ViewHolder{

        TextView txtName;
        TextView txtPhone;
        ImageView imgDelete;
        CardView cardView;

        // 3. 생성자 안에다가 연결시키는 코드 작성
        public ViewHolder(@NonNull View itemView) {
            super(itemView);

            // findViewbyID 가 안되는 이유는 자동으로 xml과 연결되는 액티비티가 아니기 때문에
            // txtName = findViewbyID
            txtName = itemView.findViewById(R.id.txtName);
            txtPhone = itemView.findViewById(R.id.txtPhone);
            imgDelete = itemView.findViewById(R.id.imgDelete);
            
        });

이 클래스는 row.xml 화면에 있는 뷰를 연결시키는 클래스이다.

에러표시로 생성자도 생성해준다.

화면과 연결할 자바 변수를 만든다.

 

4. 다시 위로 올라가 어댑터 클래스의 멤버변수와 생성자를 만들어준다.

// 4. 어댑터 클래스의 멤버변수와 생성자를 만들어준다.
// Context로 소속정보 알려주기
Context context;
List<Contact> contactList;

 

5. RecyclerView.Adapter에 <ContactAdapter.ViewHolder>추가하기 , 에러가 뜬다.

// 5. RecyclerView.Adapter에 <ContactAdapter.ViewHolder>추가하기 , 에러가 뜬다.
public class ContactAdapter extends RecyclerView.Adapter<ContactAdapter.ViewHolder> {

 

6. 처음 만들어진 3개의 메소드를 다음과 같이 변경

// 6. 아래 함수를 구현. RecyclerView.Adapter >>> ContactAdapter.ViewHolder // 액티비티가 아닌 파일을 연결하는 과정.
    @NonNull
    @Override
    public ContactAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.contact_row, parent , false);

        return new ContactAdapter.ViewHolder(view);
    }

    // 메모리에 있는 데이터(리스트)를 화면에 표시하는 함수.
    // 6. 아래 함수를 구현. RecyclerView.Adapter >>> ContactAdapter.ViewHolder
    @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);
    }

 

7. 이제 MainActivity로 가서 onCreate 함수 안에서 리사이클러뷰를 실행하기 위한 코드를 작성해준다.

recyclerView = findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));

 

8. 마지막으로 DB에서 주소록 데이터를 모두 가져와 표시하도록 setAdapter 메소드를 사용하면 된다.

// DB 에서 주소록 데이터를 모두 가져와서, 리사이클러뷰에 표시한다.
DatabaseHandler db = new DatabaseHandler(MainActivity.this);

contactList = db.getAllContacts();

adapter = new ContactAdapter(MainActivity.this, contactList);

recyclerView.setAdapter(adapter);

댓글