일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 리액트
- 자바
- react
- 입문
- 개발
- mern Stack
- Android Studio
- es6
- 안드로이드
- androidstudio
- PYTHON
- 알고리즘
- 중국어
- 안드로이드스튜디오
- 블로그만들기
- 자바스크립트
- Node js
- 중국어입문
- nodejs
- 장고
- javascript
- 블로그 만들기
- mongodb
- 파이썬
- MernStack
- Django
- 안드로이드 스튜디오
- express
- java
- Android
- Today
- Total
City At Night
[Android Studio] RecyclerView를 사용하여 데이터를 추가해보자! 본문
예전에는 ListView를 많이 사용했지만 요즈음에는 RecyclerView를 많이 사용합니다.
ListView는 제가 데이터의 갯수?만큼 List의 크기를 지정 해줘야하지만 RecyclerView는 그렇지 않습니다.
예를 들어보면 커피의 종류가 100가지가 있다고 가정하겠습니다.
ListView는 100개의 커피의 종류를 나타내기 위해 100개의 List의 크기를 지정해줘야하지만
RecyclerView는 UI에 5개만 보여주게 된다고 하면 6번째 커피는 첫 번째의 커피 View를 다시 사용하여 6번째 View를 보여줍니다. 그래서 재활용 RecyclerView라고 하죠.
Documentation에서는 이렇게 말하고 있습니다.
우선 RecyclerView가 보여지게될 MainActivity.class와 layout은 당연히 필요하고,
RecyclerView에 데이터를 추가하는 Adapter.class 그리고 RecyclerView위에 추가될 아이템(데이터)Layout이 필요합니다.
<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">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
저처럼 굳이 ContraintLayout에 LinearLayout을 추가하고 RecyclerView를 추가할 필요없고 바로 최상위 Layout에서 바로 RecyclerView를 추가하셔도 됩니다!
<view_item.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">
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="10dp"
app:cardElevation="5dp"
app:cardUseCompatPadding="true"
app:cardBackgroundColor="#FFFFFFFF"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="데이터가 추가됩니다."
android:textSize="30sp"
tools:layout_editor_absoluteX="3dp"
tools:layout_editor_absoluteY="49dp" />
</androidx.cardview.widget.CardView>
</LinearLayout>
여기서 조심해야할 점은 최상위 Layout이 Linear이여야 합니다!
왜인지는 잘 모르겠습니다.. 저는 constraint 자주 사용하는데 이것때문에 삽질좀 했네요;
<Adapter.java>
package com.example.recyclerview_tistory;
import android.util.Log;
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 Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {
private ArrayList<String> arrayList;
public Adapter(ArrayList<String> arrayList){
this.arrayList=arrayList;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
View itemView = layoutInflater.inflate(R.layout.view_item, parent, false);
return new ViewHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
String item =arrayList.get(position);
holder.setItem(item);
}
@Override
public int getItemCount() {
return arrayList.size();
}
static class ViewHolder extends RecyclerView.ViewHolder{
TextView textView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.textView);
}
public void setItem(String item){
textView.setText(item);
}
}
public void addItem(String item){
arrayList.add(item);
Log.d("#######배열에 넣어짐 --> ",item);
}
public void setarrayList(ArrayList<String> arrayList) {
this.arrayList = arrayList;
}
public String getItem(int position) {
return arrayList.get(position);
}
public void setItem(int position, String item) {
arrayList.set(position, item);
}
}
한번 만들어 놓고 다음부터 복사하여 커스텀해서 사용하시면 됩니다!!
<MainActivity.java>
package com.example.recyclerview_tistory;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
private LinearLayoutManager linearLayoutManager;
private ArrayList<String> arrayList = new ArrayList<String>();
private Adapter adapter = new Adapter(arrayList);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView=(RecyclerView)findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
linearLayoutManager = new LinearLayoutManager(this);
((LinearLayoutManager) linearLayoutManager).setReverseLayout(true);
((LinearLayoutManager) linearLayoutManager).setStackFromEnd(true);
recyclerView.setLayoutManager(linearLayoutManager);
adapter.addItem("first Data Test");
adapter.addItem("Second Data Test");
adapter.addItem("Third Data Test");
adapter.addItem("fourth Data Test");
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
}
((LinearLayoutManager) layoutManager).setReverseLayout(true);
((LinearLayoutManager) layoutManager).setStackFromEnd(true);
이 부분은 데이터를 추가하였을시 데이터가 거꾸로 출력이 됩니다!
데이터를 1 -> 2 -> 3 -> 4 순으로 넣었으면 보여질때는 4,3,2,1 순으로 최신순으로 보여지게 됩니다. 상황에 따라 잘 사용하시면 됩니다!
좌: 기본/ 우: Reverse
그럼 저번 포스팅인 내장객체 함수 SharedPreferences를 사용하고 Recyclerview를 사용하면
ToDo App을 만들 수 있겠죠?
'Android Studio' 카테고리의 다른 글
[Android Studio] Splash! 앱의 Intro를 만들어보자 (0) | 2021.01.31 |
---|---|
[Android Studio]WebView를 사용하여 Web을 App처럼 사용하기 (2) | 2021.01.31 |
[Android Studio] SharedPreferences로 간단한 데이터 저장하기! (0) | 2021.01.24 |
[Androi Studio] CustomDialog로 내가 원하는 팝업창 만들기! (0) | 2021.01.24 |
[Android Studio] AlertDialog로 팝업 메세지를 띄워보자! (0) | 2021.01.24 |