1. 개요
RecycleView에 아이템을 추가하고, 최근 추가한 아이템으로 스크롤되게 만들어 보겠습니다.
2. 작업 순서
2.1. RecycleView와 하단에 버튼 붙이기.
2.2. 추가할 아이템 데이터 구조 만들기.
2.3. 추가할 아이템 UI 만들기.
2.4. RecycleView에 아이템을 추가하는 Adapter 만들기.여기부터 작업 시작합니다.
2.5. 추가한 Item으로 이동하기
3. 작업시작
3.1. "2.4"를 진행하도록 하겠습니다.
우선 클래스를 새로 추가해야 합니다.
app에 java 를 오른쪽 마우스로 클릭 --> new --> Java Class 클릭합니다.
Name을 입력하고 Class 를 클릭하여 java 파일을 생성합니다.
3.2 자파 바일을 생성하고 아래 와 같이 코딩합니다.
// java
public class RVAdapter extends RecyclerView.Adapter<RVAdapter.ViewContaioner> {
ArrayList<RSVItem> items = new ArrayList<RSVItem>(); // 추가할 아이템을 저장할 배열 변수
입력을 하면 ViewContainer 에 빨간색으로 표시가 되는데 나중에 따로 선언을 해주면 됩니다. 이름은 따른것으로 해도 됩니다. 입력을 다한후 마우스 오른 쪽 마우스를 클릭하고 'Override Methods...'를 클릭합니다.
3.3 클릭후 'onCreateVIewHolder, onBindViewHolder, getitemCount' 를 'Ctrl'키를 누르고 마우스로 선택을 한후 'ok'를 클릭합니다.
그러면 다음과 같은 코드 추가 됩니다.
@NonNull
@Override
publicRVAdapter.ViewHolderonCreateViewHolder(@NonNullViewGroupparent,intviewType){
returnnull;
}
@Override
publicvoidonBindViewHolder(@NonNullRVAdapter.ViewHolderholder,intposition){
}
@Override
publicintgetItemCount(){
return0;
}
아래와 같이 수정합니다.
@NonNull
@Override
public RVAdapter.ViewContaioner onCreateViewHolder(@NonNull ViewGroup viewgroup, int viewType) {
LayoutInflater inflater = LayoutInflater.from(viewgroup.getContext());
View itemView = inflater.inflate(R.layout.rvitem, viewgroup,false);
return new ViewContaioner(itemView);
}
@Override
public void onBindViewHolder(@NonNull RVAdapter.ViewContaioner viewcontaioner, int position) {
RSVItem item = items.get(position);
viewcontaioner.setItem(item);
}
@Override
public int getItemCount() {
return items.size();
}
3.4 다음 다시 오른 쪽 마우스를 클릭한수 'Getter and Setter'를 클릭 후 선언한 아이템을 선택합니다.
'ok'를 클릭하면 아래와 같은 코드가 추가 됩니다.
public ArrayList<RSVItem> getItems(intidx){
returnitems.get(idx);
}
public void setItems(ArrayList<RSVItem> items){
this.items=items;
}
3.5 위와 같은 경우 아이템을 입력할때 한꺼 번에 입력하는 로직만 추가 된다. 하나 씩 추가 하는 함수를 추가함.
public void addItem(RSVItem item){
items.add(item);
}
3.6 ViewContaioner class 를 생성한다.
화면에 보여주는 아이템 UI 에 입력한 데이터를 매핑해 주는 역활을함.
static class ViewContaioner extends RecyclerView.ViewHolder {
TextView lblinput1;
TextView lblinput2;
TextView lblinput3;
public ViewContaioner(View view) {
super(view);
lblinput1 = view.findViewById(R.id.lblinput1);
lblinput2 = view.findViewById(R.id.lblinput2);
lblinput3 = view.findViewById(R.id.lblinput3);
}
public void setItem(RSVItem item) {
lblinput1.setText(item.getInput1());
lblinput2.setText(item.getInput2());
lblinput3.setText(item.getInput3());
}
}
3.7 버튼 이벤트를 추가 하여 버튼을 클릭할때마다 아이템이 추가 되게함.
MainActivty.java 에 아래 내용을 추가 합니다.
recyclerView = findViewById(R.id.RCView);
LinearLayoutManager layoutManager
= new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
recyclerView.setLayoutManager(layoutManager);
RVAdapter rvadpter = new RVAdapter();
btnadd = findViewById(R.id.btnadd);
btnadd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
rvadpter.addItem(new RSVItem("대한민국"+ number,"울등도","독도"));
recyclerView.setAdapter(rvadpter);
number++;
}
});
추가후 버튼을 크릭하면 아래와 같은 화면이표시 됩니다.
4. 소스
//RVAdapter.java
package com.example.recycleview;
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 java.util.ArrayList;
public class RVAdapter extends RecyclerView.Adapter<RVAdapter.ViewContaioner> {
ArrayList<RSVItem> items = new ArrayList<RSVItem>();
@NonNull
@Override
public RVAdapter.ViewContaioner onCreateViewHolder(@NonNull ViewGroup viewgroup, int viewType) {
LayoutInflater inflater = LayoutInflater.from(viewgroup.getContext());
View itemView = inflater.inflate(R.layout.rvitem, viewgroup,false);
return new ViewContaioner(itemView);
}
@Override
public void onBindViewHolder(@NonNull RVAdapter.ViewContaioner viewcontaioner, int position) {
RSVItem item = items.get(position);
viewcontaioner.setItem(item);
}
@Override
public int getItemCount() {
return items.size();
}
static class ViewContaioner extends RecyclerView.ViewHolder {
TextView lblinput1;
TextView lblinput2;
TextView lblinput3;
public ViewContaioner(View view) {
super(view);
lblinput1 = view.findViewById(R.id.lblinput1);
lblinput2 = view.findViewById(R.id.lblinput2);
lblinput3 = view.findViewById(R.id.lblinput3);
}
public void setItem(RSVItem item) {
lblinput1.setText(item.getInput1());
lblinput2.setText(item.getInput2());
lblinput3.setText(item.getInput3());
}
}
public RSVItem getItems(int idx) {
return items.get(idx);
}
public void setItems(ArrayList<RSVItem> items) {
this.items = items;
}
public void addItem(RSVItem item){
items.add(item);
}
}
'IT > 안드로이드' 카테고리의 다른 글
프레임 일부 투명화 (0) | 2023.03.07 |
---|---|
(Android) RecycleView에 Item 추가 하기(5/5) (2) | 2023.03.03 |
(Android) RecycleView에 Item 추가 하기(3/5) (0) | 2023.02.24 |
(Android) RecycleView에 Item 추가 하기(2/5) (0) | 2023.02.24 |
(Android)안드로이드 RecyclerView.scrollToPosition() 설명 (0) | 2023.02.24 |