본문 바로가기
개발/Java

[Android 개발] RecyclerView(Adapter) 예제 코드

by m_.9m 2022. 11. 16.


> 코드에 대한 상세 설명은 아래 글 참고

2022.11.16 - [개발 언어/Java] - 안드로이드 RecyclerView(Adapter) 예제 코드 설명

Mainactivity.java

package com.example.listview;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private RecyclerView view; //변수명은 주로 소문자 사용
    private ItemAdapter itemAdapter;
    private List<Item> datalist;

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

        datalist = new ArrayList<>();
        datalist.add(new Item("Frozen","겨울","2:30","12"));
        datalist.add(new Item("The witcher","coming soon","2:32","15"));
        datalist.add(new Item("Game of Thrones","winter is coming","2:32","19"));

        itemAdapter = new ItemAdapter(datalist);

        view = findViewById(R.id.recyclerview);
        view.setAdapter(itemAdapter);
        view.setLayoutManager(new LinearLayoutManager(this));
    }
}

 

itemAdapter.java

package com.example.listview;

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 java.util.List;

public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ItemViewHolder>  {
    private List<Item> datalist;
    public ItemAdapter(List<Item> datalist){
        this.datalist = datalist;
    }
    @NonNull
    @Override
    public ItemAdapter.ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            return new ItemViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.layout, parent, false));

//        Context context = parent.getContext();
//        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//        View view = inflater.inflate(R.layout.layout, parent, false);
//        ItemAdapter.ItemViewHolder vh = new ItemAdapter.ItemViewHolder(view);
//        return vh;

//        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout, parent, false);
//        return new ItemAdapter.ItemViewHolder(view);
    }
    
    @Override
    public void onBindViewHolder(@NonNull ItemAdapter.ItemViewHolder holder, int position) {
        Item item = datalist.get(position);
        holder.title.setText(item.getTitle());
        holder.content.setText(item.getContent());
        holder.time.setText(item.getTime());
        holder.age.setText(item.getAge());
    }

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

    public class ItemViewHolder extends RecyclerView.ViewHolder {
        private TextView title;
        private TextView content;
        private TextView time;
        private TextView age;
        private ImageView imageView;

        public ItemViewHolder(@NonNull View itemView) { //inflater한 아이템을 가져오기 위해 만든 파라미터.
            super(itemView);
            title = itemView.findViewById(R.id.title);
            content = itemView.findViewById(R.id.content);
            time = itemView.findViewById(R.id.time);
            age = itemView.findViewById(R.id.age);
            imageView = itemView.findViewById(R.id.imageView);
        }
    }
}

 

item.java

package com.example.listview;

public class Item {

    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public String getTime() {
        return time;
    }
    public void setTime(String time) {
        this.time = time;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }

    public Item(String title, String content, String time, String age) {
        this.title = title;
        this.content = content;
        this.time = time;
        this.age = age;
    }
    
    private String title;
    private String content;
    private String time;
    private String age;
}

 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">


    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

=> Component Tree

 

layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="32dp"
        android:text="title"
        android:textAppearance="@style/TextAppearance.AppCompat.Large" />

    <TextView
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="content"
        android:textAppearance="@style/TextAppearance.AppCompat.Body1" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/time"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="TextView"
            android:textAppearance="@style/TextAppearance.AppCompat.Body1" />

        <TextView
            android:id="@+id/age"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="TextView"
            android:textAppearance="@style/TextAppearance.AppCompat.Body1" />

        <View
            android:id="@+id/view"
            android:layout_width="120dp"
            android:layout_height="match_parent"
            android:layout_weight="1" />

        <ImageView
            android:id="@+id/imageView"
            android:layout_width="wrap_content"
            android:layout_height="20dp"
            android:layout_weight="1"
            app:srcCompat="@drawable/heart" />
    </LinearLayout>
</LinearLayout>

=> Component Tree