[안드로이드] - RecyclerView + CardView 사용하기
○ RecycleView + CardView 사용하기 |
RecyclerView = ListView의 단점을 보완하기 위해 나왔고, 현재 많이 쓰인다 CardView = 사용자가 사용하기 쉽고 디자인이 이쁘게 나온다 // 1. build.gradle (Module: app) : 리사이클뷰와 카드뷰를 사용하기 위해 추가한다 dependencies { compile 'com.android.support:recyclerview-v7:21.+' compile 'com.android.support:cardview-v7:21.+' } // 2. card_view.xml : 반복해서 카드뷰로 보여주고 싶은 뷰를 작성한다 <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android" card_view:cardCornerRadius="4dp" // 카드 코너를 둥글게 만드는 속성 card_view:cardElevation="5dp" // 카드를 위로 올려서 그림자가 지게 하는 속성 android:layout_margin="5dp" // 레이아웃의 간격을 줌 android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginBottom="10dp"> <ImageView android:id ="@+id/id_image" android:layout_width="40dp" android:layout_height="40dp" android:layout_marginRight="10dp"/> <TextView android:id="@+id/user_id" android:textStyle="bold" android:text="유저 아이디" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="10dp"/> <TextView android:id="@+id/make_time" android:text="생성 시간" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> <ImageView android:id="@+id/image" android:layout_width="match_parent" android:layout_height="200dp" android:layout_marginBottom="10dp"/> <TextView android:id="@+id/title" android:text="제목" android:textStyle="bold" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="5dp"/> <TextView android:id="@+id/desc" android:text="설명" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> </android.support.v7.widget.CardView> // 3. 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="com.example.jihoon.recyclecardviewtest.MainActivity"> <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/recyclerView"> </android.support.v7.widget.RecyclerView> </LinearLayout> // 4. data.java : 사용할 객체들을 getter/setter 해준다 public class data { private String user_id; private String make_time; private String title; private String desc; private int id_image; private int image; public String getUser_id() { return user_id; } public void setUser_id(String user_id) { this.user_id = user_id; } public String getMake_time() { return make_time; } public void setMake_time(String make_time) { this.make_time = make_time; } public int getId_image() { return id_image; } public void setId_image(int id_image) { this.id_image = id_image; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } public int getImage() { return image; } public void setImage(int image) { this.image = image; } } // 5. RecycleAdapter.java : 리스트뷰처럼 사용하기 위해 어답터를 생성한다 public class RecycleAdapter extends RecyclerView.Adapter<RecycleAdapter.ViewHolder> { private List<data> dataList; private int itemLayout; /** * 생성자 * @param items * @param itemLayout */ public RecycleAdapter(List<data> items , int itemLayout){ this.dataList = items; this.itemLayout = itemLayout; } /** * 레이아웃을 만들어서 Holer에 저장 * @param viewGroup * @param viewType * @return */ @Override public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { View view = LayoutInflater.from(viewGroup.getContext()).inflate(itemLayout,viewGroup,false); return new ViewHolder(view); } /** * listView getView 를 대체 * 넘겨 받은 데이터를 화면에 출력하는 역할 * * @param viewHolder * @param position */ @Override public void onBindViewHolder(ViewHolder viewHolder, int position) { data item = dataList.get(position); viewHolder.textTitle.setText(item.getTitle()); viewHolder.testDesc.setText(item.getDesc()); viewHolder.img.setBackgroundResource(item.getImage()); viewHolder.make_time.setText(item.getMake_time()); viewHolder.user_id.setText(item.getUser_id()); viewHolder.id_image.setBackgroundResource(item.getId_image()); viewHolder.itemView.setTag(item); } @Override public int getItemCount() { return dataList.size(); } /** * 뷰 재활용을 위한 viewHolder */ public static class ViewHolder extends RecyclerView.ViewHolder{ public ImageView img; public TextView textTitle; public TextView testDesc; public ImageView id_image; public TextView user_id; public TextView make_time; public ViewHolder(View itemView){ super(itemView); img = (ImageView) itemView.findViewById(R.id.image); textTitle = (TextView) itemView.findViewById(R.id.title); testDesc = (TextView)itemView.findViewById(R.id.desc); id_image = (ImageView) itemView.findViewById(R.id.id_image); user_id = (TextView) itemView.findViewById(R.id.user_id); make_time = (TextView)itemView.findViewById(R.id.make_time); } } } // 6. MainActivity.java : 리사이클러뷰 + 카드뷰를 사용할 액티비티에 적용한다 public class MainActivity extends AppCompatActivity { RecyclerView lecyclerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initLayout(); initData(); } /** * 레이아웃 초기화 */ private void initLayout(){ lecyclerView = (RecyclerView)findViewById(R.id.recyclerView); } /** * 데이터 초기화 */ private void initData(){ List<data> dataList = new ArrayList<data>(); for (int i=1; i<=15; i++){ data writeData = new data(); writeData.setTitle("글 제목" + i ); writeData.setDesc("글 내용" + i ); writeData.setImage(R.mipmap.ic_launcher); writeData.setUser_id("유저 아이디" + i ); writeData.setMake_time("생성시간" + i ); writeData.setId_image(R.mipmap.ic_launcher); dataList.add(writeData); } lecyclerView.setAdapter(new RecycleAdapter(dataList,R.layout.card_view)); lecyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext())); lecyclerView.setItemAnimator(new DefaultItemAnimator()); } } |
'안드로이드' 카테고리의 다른 글
[안드로이드] - ListView 안의 아이템들 각각 이벤트 처리 (0) | 2018.04.18 |
---|---|
[안드로이드] - RecyclerView 리싸이클러뷰 클릭 이벤트 사용하기 (0) | 2018.04.01 |
[안드로이드] - 커스텀 툴바 만들기(Toolbar) (1) | 2018.03.30 |
[안드로이드] - strings.xml colors.xml 활용하기 (0) | 2018.03.23 |
[안드로이드] - 어플 종료 시 광고창 띄우기 (0) | 2017.11.26 |