본문 바로가기
안드로이드 자바

[Android][Java] 리사이클러뷰 최하단 이동

by teamnova 2023. 7. 23.

안녕하세요. 오늘은 버튼클릭을 통해 리사이클러뷰 최하단을 이동하는 예제를 보여드리겠습니다.

추후 버튼이 아니더라도 조건에 맞게 사용하시면 좋을거 같습니다.

 

먼저 메인액티비티 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:layout_width="match_parent"
        android:layout_height="600dp"
        android:id="@+id/recycler_view"
        app:layout_constraintTop_toTopOf="parent"/>
    <Button
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:text="최하단으로 이동"
        app:layout_constraintTop_toBottomOf="@+id/recycler_view"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:id="@+id/move_to_down"/>


</androidx.constraintlayout.widget.ConstraintLayout>

그리고 다음은 리사이클러뷰 아이템 xml입니다. 저는 list_item.xml로 만들었습니다.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="100dp">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/item_name"/>

</androidx.constraintlayout.widget.ConstraintLayout>

그리고 리사이클러뷰에 들어갈 데이터 클래스입니다.

public class ItemData {
    public String getItem_name() {
        return item_name;
    }

    public void setItem_name(String item_name) {
        this.item_name = item_name;
    }
    public ItemData(String item_name){
        this.item_name = item_name;
    }
    String item_name;

}

데이터 세팅 준비가 되었다면 리사이클러뷰 어댑터를 만들어 보겠습니다.

RecyclerViewAdapter.java

package com.song.stickcode;


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

import androidx.recyclerview.widget.RecyclerView;


import java.util.ArrayList;

class RecyclerViewAdapta extends RecyclerView.Adapter<RecyclerViewAdapta.ViewHolder> {
    public ArrayList<ItemData> itemDatas;
    public class ViewHolder extends RecyclerView.ViewHolder {
        TextView item_name_view;
        public ViewHolder(View itemView) {
            super(itemView);
            item_name_view = itemView.findViewById(R.id.item_name);
        }
    }
    RecyclerViewAdapta(ArrayList<ItemData> itemDatas){
        this.itemDatas = itemDatas;
    }

    @Override
    public RecyclerViewAdapta.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.list_item, parent, false);
        return new RecyclerViewAdapta.ViewHolder(view);
    }
    @Override
    public void onBindViewHolder(RecyclerViewAdapta.ViewHolder holder, int position) {
        holder.item_name_view.setText(itemDatas.get(position).getItem_name());
    }

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

}

 

마지막으로 메인액티비티 클래스입니다.

public class MainActivity extends AppCompatActivity {
    Button move_to_down_btn;
    RecyclerView recyclerView;
    Context context;
    ArrayList<ItemData> itemDatas = new ArrayList<>();
    RecyclerViewAdapta recyclerViewAdapta;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        context = this;
        move_to_down_btn = findViewById(R.id.move_to_down);
        recyclerView = findViewById(R.id.recycler_view);
        recyclerView.setLayoutManager(new LinearLayoutManager(context));
        for (int i = 0; i < 7; i++) {
            String item_name = "아이템" + i;
            itemDatas.add(new ItemData(item_name));
        }
        recyclerViewAdapta = new RecyclerViewAdapta(itemDatas);
        recyclerView.setAdapter(recyclerViewAdapta);
        move_to_down_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                recyclerView.scrollToPosition(itemDatas.size()-1);
            }
        });
    }

}

scrollToPosition을 통해 리사이클러뷰의 위치를 이동할 수 있습니다.

 

결과 보여드리겠습니다.