Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- ReactDOM
- layout
- ViewGroup
- ConstraintLayout
- Anko SQLite
- function scope
- .kt
- RecyclerView
- cardview
- permission
- component
- intent
- Eclipse
- Retrofit2
- react
- javascript
- LinearLayout
- java
- Kotlin
- http
- linux
- Git
- view
- props
- vim
- 안드로이드
- RelativeLayout
- android
- block scope
- Anro Coroutines
Archives
- Today
- Total
이것저것 다 개발
[Android] RecyclerView + CardView 본문
RecyclerView + CardView 사용법입니다.
RecyclerView는 ListView 보다 더욱 향상되고 유연해진 View 입니다.
RecyclerView는 위와 같은 구조로 되어있습니다.
먼저 프로젝트를 생성해줍니다.
Alt + Ctrl + Shift + s 를 누르게 되면 아래와 같이 Project Structure 화면이 뜹니다.
recyclerview 를 선택한 후 OK 버튼을 누릅니다.
마찬가지로 CardView도 추가해줍니다.
위와 같이 build.gradle 파일에 dependencies가 추가 됩니다. (CardView 추가된게 빠졌네요..)
프로젝트의 전체적인 구조는 MainActivity, RvAdapter, activity_main.xml, list_item.xml 입니다.
MainActivity.java 의 소스입니다.
package kr.co.recyclerviewdemo;
import android.app.Activity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends Activity {
private RecyclerView rv;
private LinearLayoutManager llm;
private List<Integer> count;
private int i = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rv = (RecyclerView) findViewById(R.id.main_rv);
llm = new LinearLayoutManager(this);
count = new ArrayList<>();
rv.setHasFixedSize(true);
rv.setLayoutManager(llm);
}
public void onClick(View view) {
switch (view.getId()) {
case R.id.main_btn_add : {
i ++;
count.add(i);
RvAdapter adapter = new RvAdapter(getApplication(), count, i);
rv.setAdapter(adapter);
Log.d("Count", count + "");
break;
}
}
}
}
RecyclerView는 LayoutManager를 생성해야하며 아이템을 관리해줍니다.
RvAdapter.java 의 소스입니다.
package kr.co.recyclerviewdemo;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.List;
/**
* Created by yongyi on 2017-11-27.
*/
public class RvAdapter extends RecyclerView.Adapter<RvAdapter.CustomViewHolder> {
private Context context;
private List<Integer> items;
private int i;
public RvAdapter(Context context, List<Integer> items, int i) {
this.context = context;
this.items = items;
this.i = i;
}
@Override
public CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
CustomViewHolder viewHolder = new CustomViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(CustomViewHolder holder, int position) {
final Integer item = items.get(position);
holder.title.setText(item + "");
holder.content.setText(item + "content");
}
@Override
public int getItemCount() {
return this.items.size();
}
public class CustomViewHolder extends RecyclerView.ViewHolder {
TextView title;
TextView content;
public CustomViewHolder(View itemView) {
super(itemView);
title = itemView.findViewById(R.id.item_tv_title);
content = itemView.findViewById(R.id.item_tv_content);
}
}
}
Adapter에서는 ViewHolder를 상속받는 CustomViewHolder를 내부적으로 만들고 그 외의 내용은 ListView와 큰 차이가 없습니다.
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="kr.co.recyclerviewdemo.MainActivity">
<Button
android:id="@+id/main_btn_add"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="ADD"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/main_rv"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</android.support.v7.widget.RecyclerView>
</LinearLayout>
list_item.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="wrap_content"
android:layout_margin="3dp"
xmlns:app="http://schemas.android.com/apk/res-auto">
<android.support.v7.widget.CardView
android:id="@+id/item_cardview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="1dp"
app:cardUseCompatPadding="true"
app:cardElevation="5dp"
app:cardCornerRadius="3dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:orientation="vertical">
<TextView
android:id="@+id/item_tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="25dp"
android:textStyle="bold"
android:text="title"/>
<TextView
android:id="@+id/item_tv_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20dp"
android:text="content"/>
</LinearLayout>
</android.support.v7.widget.CardView>
</LinearLayout>
완성된 화면은 다음과 같습니다.
Kotlin으로 코딩한 RecyclerView + CardView << Click 바로가기
'Android' 카테고리의 다른 글
[Android] Fragment에서 Activity Method 사용하기 (0) | 2017.11.30 |
---|---|
[Android] Intent (0) | 2017.11.28 |
[Android] ViewGroup 비교 (0) | 2017.11.27 |
[Android] Material Icon 사용하기 (0) | 2017.11.24 |
[Android] Style 적용하기 (0) | 2017.11.23 |
Comments