ruriruriya

[Android] 안드로이드 - RecyclerView와 Adapter를 이용하여 리스트를 화면에 표시하는 방법 본문

🤖Android

[Android] 안드로이드 - RecyclerView와 Adapter를 이용하여 리스트를 화면에 표시하는 방법

루리야ㅑ 2023. 12. 28. 15:21
반응형

RecyclerView는 안드로이드에서 리스트나 그리드와 같은 형태의 데이터를 효율적으로 표시하기 위한 위젯이다. RecyclerView를 사용하여 리스트를 화면에 표시해보자.

 

1. adapter 패키지 Adapter 클래스 생성

public class PostAdapter{

}

 

 

2. ViewHolder 맴버변수 선언/ 화면연결

    public class ViewHolder extends RecyclerView.ViewHolder {

        TextView txtUserId;
        TextView txtTitle;
        TextView txtBody;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);

            txtUserId = itemView.findViewById(R.id.txtUserId);
            txtTitle = itemView.findViewById(R.id.txtTitle);
            txtBody = itemView.findViewById(R.id.txtBody);
        }
    }

 

3. public class PostAdapter extends RecyclerView.Adapter<PostAdapter.ViewHolder>

extends 하고 오버라이딩 하기.

3.1. 맴버변수 선언

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

    Context context;

    ArrayList<Post> postArrayList;
    
    // postArrayList 생성자.
    public PostAdapter(Context context, ArrayList<Post> postArrayList){
    	this.context = context;
        this.postArrayList = postArrayList;
    }
    
}

 

3.2. onCreateViewHolder 설정

    @NonNull
    @Override
    public PostAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.post_row, parent, false);
        return new PostAdapter.ViewHolder(view);
    }

 

3.3. onBindViewHolder 화면에 넣어주는 담당.

    @Override
    public void onBindViewHolder(@NonNull PostAdapter.ViewHolder holder, int position) {
        Post post = postArrayList.get(position);

        holder.txtUserId.setText(""+post.userId); // 문자열..을 int로 바꿔야 됌. 안그럼 Error
        holder.txtTitle.setText(post.title);
        holder.txtBody.setText(post.body);
    }

 

3.4. getItemCount 리사이클러뷰 카운팅

    @Override
    public int getItemCount() {
        return postArrayList.size();
    }

 

4. 전체 코드

package com.--.network2.adapter;

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

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

import com.sunny.network2.R;
import com.sunny.network2.model.Post;

import java.util.ArrayList;

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

    Context context;

    ArrayList<Post> postArrayList;

    public PostAdapter(Context context, ArrayList<Post> postArrayList){
        this.context = context;
        this.postArrayList = postArrayList;
    }

    @NonNull
    @Override
    public PostAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.post_row, parent, false);
        return new PostAdapter.ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull PostAdapter.ViewHolder holder, int position) {
        Post post = postArrayList.get(position);

        holder.txtUserId.setText(""+post.userId); // 문자열..을 int로 바꿔야 됌. 안그럼 Error
        holder.txtTitle.setText(post.title);
        holder.txtBody.setText(post.body);
    }

    @Override
    public int getItemCount() {
        return postArrayList.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        TextView txtUserId;
        TextView txtTitle;
        TextView txtBody;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);

            txtUserId = itemView.findViewById(R.id.txtUserId);
            txtTitle = itemView.findViewById(R.id.txtTitle);
            txtBody = itemView.findViewById(R.id.txtBody);
        }
    }
}
반응형