상세 컨텐츠

본문 제목

[안드로이드] RecyclerView 다중 화면 적용하는 방법

안드로이드

by aries574 2022. 4. 13. 15:45

본문


RecyclerView를 사용하는 방법은 데이터를 보여줄 화면(xml) 하나와

어뎁터를 통해 데이터와 화면을 연결해서 RecyclerView에 보여줍니다.

만약에 데이터별로 각자 다른 화면에 보여주고 싶다면 어떻게 해야 하는지

이번에 알아보겠습니다. 


목차

1. 실행 화면

2. 데이터 클래스 만들기

3. 아이템 클래스 만들기

4. 아이템 화면 만들기

5. 어뎁터 클래스 만들기

6. 메인 화면 구성 activity_main.xml

7. 메인 코드 구현 MainActivity.java


1. 실행 화면

 

2. 데이터 클래스 만들기

 - 설명 -

 데이터를 담을 그릇입니다. 

2021.12.31 - [안드로이드] - [안드로이드 스튜디오] 자바 클래스 생성하는 방법

 

[안드로이드 스튜디오] 자바 클래스 생성하는 방법

이번 시간에는 안드로이드 스튜디오(AndroidStudio)에서 자바 클래스 생성하는 방법을 알아보겠습니다. 기본으로 안드로이드 스튜디오 프로젝트를 생성하면 아래 화면처럼 MainActivity가 기본으로 생

aries574.tistory.com

 

 Model1.java

public class Model1 {

    private String model1Nm;

    public Model1(String model1Nm) {
        this.model1Nm = model1Nm;
    }

    public String getModel1Nm() {
        return model1Nm;
    }

    public void setModel1Nm(String model1Nm) {
        this.model1Nm = model1Nm;
    }
}

Model2.java

public class Model2 {

    private String model2Nm;

    public Model2(String model2Nm) {
        this.model2Nm = model2Nm;
    }

    public String getModel2Nm() {
        return model2Nm;
    }

    public void setModel2Nm(String model2Nm) {
        this.model2Nm = model2Nm;
    }
}

 

3. 아이템 클래스 만들기

 - 설명 - 

 모델을 담을 클래스입니다.

Item.java

public class Item {

    int viewType; //화면타입
    Object object; //데이터

    public Item(int viewType, Object object) {
        this.viewType = viewType;
        this.object = object;
    }

    public int getViewType() {
        return viewType;
    }

    public void setViewType(int viewType) {
        this.viewType = viewType;
    }

    public Object getObject() {
        return object;
    }

    public void setObject(Object object) {
        this.object = object;
    }
}

 

4. 아이템 화면 만들기

 - 설명 -

 데이터를 보여줄 화면입니다.

2022.01.01 - [안드로이드] - [안드로이드 스튜디오] 레이아웃 추가하는 방법

 

[안드로이드 스튜디오] 레이아웃 추가하는 방법

이번 시간에는 안드로이드 스튜디오에서 레이아웃 추가하는 방법을 알아보겠습니다. 안드로이드 프로젝트를 만들면 java폴더에는 MainActivity 파일이 있고, res -> layout 폴더에는 activity_main.xml 파일

aries574.tistory.com

model1_view.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="8dp"
    app:cardCornerRadius="8dp"
    app:cardElevation="4dp">

    <TextView
        android:id="@+id/textModel1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/holo_blue_light"
        android:gravity="center"
        android:textColor="@android:color/white"
        android:textSize="30sp"
        android:textStyle="bold" />

</androidx.cardview.widget.CardView>

 

model2_view.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="8dp"
    app:cardCornerRadius="8dp"
    app:cardElevation="4dp">

    <TextView
        android:id="@+id/textModel2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/holo_green_light"
        android:gravity="center"
        android:textColor="@android:color/white"
        android:textSize="30sp"
        android:textStyle="bold" />

</androidx.cardview.widget.CardView>

 

 

5. 어뎁터 클래스 만들기

 - 설명 -

 화면과 데이터를 연결해주는 클래스입니다.

 1. getItemViewType을 통해 viewType을 리턴합니다.

 2. onCreateViewHolder메서드의 viewType에 리턴한

 값이 들어가 있습니다.

 3. 조건문에 따라 model1_view을 보여줄지

 model2_view를 보여줄지 정합니다. 

 4. onBindViewHolder메서드에서도 viewType에 따라

어떤 데이터를 어떤 화면에 보여줄지 정합니다. 

 ModelAdapter.java

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

    private List<Item> items;

    public ModelAdapter(List<Item> items) {
        this.items = items;
    }

    //화면 설정
    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        //0 == model1 , 1 == model2
        if(viewType == 0){

            return new Model1ViewHolder(LayoutInflater.from(parent.getContext()).inflate(
                    R.layout.model1_view, parent, false));
        }else{

            return new Model2ViewHolder(LayoutInflater.from(parent.getContext()).inflate(
                    R.layout.model2_view, parent, false));
        }
    }

    //데이터 설정
    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {

        if(getItemViewType(position) == 0){

            Model1 model1 = (Model1) items.get(position).getObject();
            ((Model1ViewHolder) holder).setModel1Data(model1);
        }else{

            Model2 model2 = (Model2) items.get(position).getObject();
            ((Model2ViewHolder) holder).setModel2Data(model2);
        }
    }

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

    @Override
    public int getItemViewType(int position) {
        return items.get(position).getViewType();
    }

    //화면1
    static class Model1ViewHolder extends RecyclerView.ViewHolder{

        private TextView textModel1;

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

            textModel1 = itemView.findViewById(R.id.textModel1);
        }

        public void setModel1Data(Model1 model1){

            textModel1.setText(model1.getModel1Nm());
        }
    }

    //화면2
    static class Model2ViewHolder extends RecyclerView.ViewHolder{

        private TextView textModel2;

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

            textModel2 = itemView.findViewById(R.id.textModel2);
        }

        public void setModel2Data(Model2 model2){

            textModel2.setText(model2.getModel2Nm());
        }
    }
}

 

6. 메인 화면 구성 activity_main.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="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clipToPadding="false"
        android:padding="8dp"
        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
        />

</LinearLayout>

 

7. 메인 코드 구현 MainActivity.java

 - 설명 - 

 1. 반복문(for)을 통해 샘플데이터를 생성합니다. 

 2. Model1에 데이터를 담고, List <Item>에 model1을 담습니다.

 3. Model2에 데이터를 담고, List <Item>에 model2를 담습니다.

 4. List <Item>를 Adapter에 적용하고, AdapterRecycelrView에 적용합니다.

public class MainActivity extends AppCompatActivity {


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

        RecyclerView recyclerView = findViewById(R.id.recyclerView);

        List<Item> items = new ArrayList<>();

        //샘플 데이터 생성
        for(int i = 0; i < 10; i++){

            Model1 model1 = new Model1("model1_item" + i);
            items.add(new Item(0, model1));

            Model2 model2 = new Model2("model2_item" + i);
            items.add(new Item(1, model2));
        }

        //데이터 적용
        recyclerView.setAdapter(new ModelAdapter(items));
    }

}//MainActivity

2022.04.11 - [안드로이드] - [안드로이드] 액티비티(Activity)에서 프래그먼트(Fragment) 데이터 전달하는 방법

 

[안드로이드] 액티비티(Activity) 에서 프래그먼트(Fragment) 데이터 전달하는 방법

이번 시간에는 액티비티(Activity)에서 프래그먼트(Fragment)로 데이터 전달하는 방법에 대하여 알아보겠습니다. 목차 1. 실행 화면 2. 프래그먼트 만들기 3. 메인 화면 구성 activity_main.xml 4. 메인 코드

aries574.tistory.com

2022.04.12 - [안드로이드] - [안드로이드] 프래그먼트(Fragment)에서 액티비티(Activity) 데이터 전달하는 방법

 

[안드로이드] 프래그먼트(Fragment)에서 액티비티(Activity) 데이터 전달하는 방법

이번 시간에는 프래그먼트에서 액티비티로 데이터 전달하는 방법을 알아보겠습니다. 1. 실행 화면 2. 인터페이스 만들기 3. 프래그먼트 만들기 4. 메인 화면 구성 activity_main.xml 5. 메인 코드 구현 M

aries574.tistory.com

2022.04.07 - [안드로이드] - [안드로이드] 코드(MainActivity)에서 배경 색상 바꾸는 다양한 방법

 

[안드로이드] 코드(MainActivity) 에서 배경색상 바꾸는 다양한 방법

이번 시간에는 코드에서 레이아웃이나 텍스트뷰들의 배경 색상을 바꾸는 다양한 방법을 알아보겠습니다. 목차 1. 실행 화면 2. 메인 화면 구성 activity_main.xml 3. 메인 코드 구현 MainActivity.java 1. 실

aries574.tistory.com

반응형

관련글 더보기

댓글 영역