728x90
반응형
순서
라이브러리 다운 -> RecyclerView 컴포넌트 붙이기
-> 액티비티와 연결하기 -> 어댑터 연결하기
RecycleView를 사용하기 위해 필요한 xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:paddingTop="12dp">
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/recyclerview"
android:scrollbars="vertical"/>
</LinearLayout>
1. RecyclerView 화면을 보여줄 액티비티 xml파일
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:paddingTop="12dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="100dp">
<ImageView
android:id="@+id/imageView_title"
android:layout_width="match_parent"
android:layout_height="100dp"
android:background="@null"
android:src="@drawable/ic_launcher_foreground"/>
<TextView
android:id="@+id/textView_title"
android:layout_width="match_parent"
android:layout_height="35dp"
android:text="text_area"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:textSize="20sp"
android:gravity="center"
android:background="#70000000"
android:textColor="#ffffff"
android:textStyle="bold"
android:layout_alignParentBottom="true">
</TextView>
</RelativeLayout>
<TextView
android:id="@+id/textView_content"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="text_area"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:textSize="12sp"
android:ellipsize="end">
</TextView>
</LinearLayout>
2. RecyclerView의 리스트의 항목을 보여줄 xml파일 ( 각 아이템 하나씩 )
Adapter의 onCreateViewHolder 함수에 작성한다
나는 imageView_title와 첫 textView_title을 겹치게 하기 위해
RelativeLayout으로 한번 더 감싸줬다.
라이브러리 다운
implementation 'androidx.recyclerview:recyclerview:1.3.0-alpha01'
build.gradle (:app) -> dependencies { 안에 추가하는데 다른 버전들은
Android 개발자 공식 홈페이지에서 확인하자
https://developer.android.com/guide/topics/ui/layout/recyclerview#java
RecyclerView 컴포넌트 붙이기
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/recyclerview"
android:scrollbars="vertical"/>
액티비티와 연결하기
위의 xml파일과 연결한다
public class NewsActivity extends AppCompatActivity {
private RecyclerView recyclerview;
private RecyclerView.Adapter adapter;
private RecyclerView.LayoutManager layoutManager;
String[] myDataset={"1","2"}; // 1,2 테스트
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_news);
recyclerview = findViewById(R.id.recyclerview);
recyclerview.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(this);
recyclerview.setLayoutManager(layoutManager);
adapter = new NewsAdapter(myDataset);
recyclerview.setAdapter(adapter);
}
}
어댑터 연결하기
위와 같이 setAdapter한 adapter를 구현
public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.NewsViewHolder> {
private String[] newsDataset;
// 2. 그 안의 요소를 찾아가는 ViewHolder Class
protected static class NewsViewHolder extends RecyclerView.ViewHolder{
public TextView textView_title;
public TextView textView_content;
public ImageView imageView_title;
public NewsViewHolder(View v){
super(v);
// Activity가 아니라 부모로 정한 Linerlayout v 라고 정의한 v에서 findViewById로 값을 가져와야 함
textView_title = v.findViewById(R.id.textView_title);
textView_content = v.findViewById(R.id.textView_content);
imageView_title = v.findViewById(R.id.imageView_title);
}
}
public NewsAdapter(String[] myDataset){
newsDataset = myDataset;
}
// 1. RecyclerView의 항목화면 연결은 onCreateViewHolder함수
@Override
public NewsAdapter.NewsViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
// 특정한 컴포넌트 ( 여기서는 리사이클러 뷰 )의 특정 항목의 레이아웃을 바꾸는 inflate
LinearLayout v = (LinearLayout) LayoutInflater.from(parent.getContext()).inflate(R.layout.row_news, parent, false);
NewsViewHolder vh = new NewsViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(@NonNull NewsViewHolder holder, int position) {
holder.textView_title.setText(newsDataset[position]);
}
@Override
public int getItemCount() {
return newsDataset.length;
}
}
흐름 정리
---Activity에서---
String[] myDataset={"1","2"};
String[] myDataset = 값들
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_news);
recyclerview = findViewById(R.id.recyclerview);
recyclerview.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(this);
recyclerview.setLayoutManager(layoutManager);
adapter = new NewsAdapter(myDataset);
recyclerview.setAdapter(adapter);
adapter = new NewsAdapter(myDataset)
recyclerview.setAdapter(adapter)
Adapter로 넘기고,
---Adapter에서---
public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.NewsViewHolder> {
private String[] newsDataset;
// 2. 그 안의 요소를 찾아가는 ViewHolder Class
protected static class NewsViewHolder extends RecyclerView.ViewHolder{
public TextView textView_title;
public TextView textView_content;
public ImageView imageView_title;
public NewsViewHolder(View v){
super(v);
// Activity가 아니라 부모로 정한 Linerlayout v 라고 정의한 v에서 findViewById로 값을 가져와야 함
textView_title = v.findViewById(R.id.textView_title);
textView_content = v.findViewById(R.id.textView_content);
imageView_title = v.findViewById(R.id.imageView_title);
}
}
사용할 값을 ViewHolder에 정의하고
public NewsAdapter(String[] myDataset){
newsDataset = myDataset;
}
생성자를 정의하고
@Override
public void onBindViewHolder(@NonNull NewsViewHolder holder, int position) {
holder.textView_title.setText(newsDataset[position]);
}
생성자에서 받아온 값을 onBindViewHolder에서 사용한다 ( newsDataset )
반응형
'Android' 카테고리의 다른 글
[Android/Java] Volley + JsonAPI사용 (0) | 2022.01.11 |
---|---|
[Android/Java] CardView, Json 사용하기 (0) | 2022.01.07 |
[Android/Java] Design lib (0) | 2022.01.04 |
[Android/Java] Intent 사용 (0) | 2022.01.04 |
[Android/Java] Git연동과 findViewById 에러 (0) | 2022.01.04 |