코드네임 :

📱 모바일프로그래밍 - 리사이클러뷰 예제 - 📱 본문

백엔드/Android_JAVA

📱 모바일프로그래밍 - 리사이클러뷰 예제 - 📱

비엔 Vien 2024. 11. 21. 22:19
// Example8_1
// RecylclerViewAdapter.java


// RecyclerViewAdapter는 RecyclerView.Adapter를 상속받아 구현됨
/// 여기서 RecyclerView.Adapter의 제네릭 타입은 ViewHolder!!!
public class RecyclerViewAdapter extends RecyclerView.Adapter <RecyclerViewAdapter.ViewHolder>{

    private Context  context; //어댑터가 실행되는 환경(Context)을 참조하기 위한
    private List<String> items; //RecyclerView에 표시할 데이터를 담은 리스트

    // 멤버변수 초기화
    /// context와 items를 전달받아 어댑터 내부에서 사용할 수 있도록 멤버 변수에 저장
    public RecyclerViewAdapter(Context context, List<String> items){
        this.context = context;
        this.items = items;
    }

    @NonNull
    @Override
    //onCreateViewHolder :  RecyclerView의 아이템 뷰를 생성하는 메서드,  화면에 표시할 개별 아이템 뷰를 준비

    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        // LayoutInflater.from(): XML 레이아웃 파일(R.layout.row_recyclerviewd이므로 row_recyclerview.xml)을 실제 뷰 객체로 변환
        // parent.getContext(): 현재 RecyclerView의 컨텍스트를 가져옵
        // inflate(): row_recyclerview xml레이아웃 파일을 itemview로 사용 !!!
        View v = LayoutInflater .from(parent.getContext()).
                inflate(R.layout.row_recyclerview, parent, false);

        // return new ViewHolder(v) : 생성된 뷰(v)를 관리하기 위해 ViewHolder 객체를 반환
        return new ViewHolder(v);
    }

    @Override
    // 생성된 뷰에 데이터를 연결
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

        //현재 위치(position)의 데이터를 가져와 TextView에 설정
        holder.text.setText(items.get(position));

        //아이템 클릭 이벤트 처리. 클릭 시 현재 아이템의 위치를 Toast 메시지로 표시.
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(context, "아이템클릭" + holder
                        .getAdapterPosition(),Toast.LENGTH_SHORT).show();
            }
        });
    }

    @Override
    //RecyclerView에 표시할 아이템의 개수를 반환 (리스트의 크기를 반환함으로써)
    public int getItemCount() {
        return items.size();
    }


    //RecyclerView에서 개별 아이템 뷰를 관리
    // ViewHolder: RecyclerView에서 각각의 아이템 뷰에 포함된 뷰(TextView, ImageView 등)를 저장하고 재사용하는 객체
    // 이 클래스는 **RecyclerView.ViewHolder**를 상속받아야 함
    // RecyclerView는 ViewHolder를 통해 뷰를 효율적으로 관리하고, 스크롤할 때 재사용(recycling)
    static class ViewHolder extends RecyclerView.ViewHolder{ //내부 클래스

        TextView text;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            text = itemView.findViewById(R.id.text);
            //여기서 **itemView**는 row_recyclerview.xml 전체를 나타냅니다.
            //findViewById(R.id.text)로 XML 안의 TextView를 가져옵니다.
        }

        // itemView : RecyclerView에서 한 개의 아이템 전체를 나타내는 뷰
        ///예를 들어, RecyclerView에 표시될 각 리스트 아이템의 레이아웃(XML 파일) 전체를 말합니다.
        ///즉, row_recyclerview.xml 파일에서 정의된 모든 뷰(TextView, ImageView 등)가 itemView에 포함됩니다.

        ////어디서 생성되나요?
        ////onCreateViewHolder 메서드에서 생성됩니다.
        ////여기에서 XML 레이아웃(row_recyclerview.xml)을 LayoutInflater를 통해 실제 화면에 표시할 뷰 객체로 변환합니다.
        ////변환된 결과가 바로 **itemView**입니다.

        ////어떤 역할을 하나요?
        ////RecyclerView는 이 itemView를 사용해 화면에 리스트 아이템을 표시합니다.
        ////예를 들어, itemView에 포함된 TextView, ImageView 등을 코드에서 접근할 때 사용합니다.
        ////ViewHolder 내부에서 itemView.findViewById()로 특정 뷰(TextView 등)를 가져올 수 있습니다.

        ////비유로 이해하기
        //row_recyclerview.xml은 아이템의 설계도입니다.
        //onCreateViewHolder에서 이 설계도를 사용해 실제 아이템 뷰(itemView)를 만듭니다.
        //RecyclerView는 이 itemView를 화면에 추가하고, 관리합니다.
        
        
        ////간단 요약
        //itemView = RecyclerView의 한 줄(아이템)의 전체 레이아웃입니다.
        //ViewHolder는 이 itemView를 관리하면서, 안에 있는 뷰들(TextView 등)을 설정하거나 조작합니다.

    }

 

 

 

#inside MainActivity.java, 
# protected void onCreate(Bundle savedInstanceState) { ~ }); 다음


        // XML 레이아웃 파일에 정의된 RecyclerView를 찾아 Java 코드에서 사용할 준비를 합니다.
        RecyclerView recyclerView = findViewById(R.id.recyclerView);


        //RecyclerView에 데이터를 표시하기 위해 **어댑터(Adapter)**를 설정
        //this: 현재 Context(Activity)를 전달.
        //createItemList(): RecyclerView에 표시할 데이터를 생성하는 메서드로, 20개의 아이템 리스트를 반환합니다.
        RecyclerViewAdapter adapter = new RecyclerViewAdapter(this, createItemList());
        //RecyclerView에 어댑터를 연결하여 데이터를 표시할 수 있게 합니다.
        recyclerView.setAdapter((adapter));

        // 레이아웃 매니저를 통해 RecyclerView의 레이아웃을 설정합니다.
        LinearLayoutManager layoutManager
                = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);

        //RecyclerView에 어댑터를 연결하여 데이터를 표시할 수 있게 합니다
        recyclerView.setLayoutManager(layoutManager);

    }

    // 20개의 String 데이터를 가진 리스트를 생성
    private List<String> createItemList() {
        List<String> items = new ArrayList<>();
        for (int i = 0; i < 20; i++) {
            items.add("아이템" + i);
        }
        return items;
    }