AndroidRecycleView自定义Item的使用
- 格式:pdf
- 大小:295.05 KB
- 文档页数:4
AndroidRecycleView⾃定义Item的使⽤
⾃定义布局的RecycleView需要⾃⼰实现Adapter,ViewHolder和布局;
⾃定义Adapter继承RecycleView.Adapter,重写getItemCount(),onBindViewHolder()和onCreateViewHolder();
⾃定义ViewHolder继承于RecycleView.ViewHolder;
getItemCount()返回RecycleView中Item的个数,onBindViewHolder()主要实现数据和布局的绑定,onCreateViewHolder()加载布局;效果:
适配器代码:
1 package com.cloud.recycleviewdemo;
2
3 import android.support.annotation.NonNull; 4 import android.support.v7.widget.RecyclerView;
5 import android.view.LayoutInflater;
6 import android.view.View;
7 import android.view.ViewGroup;
8 import android.widget.ImageView;
9 import android.widget.TextView;
10
11 import java.util.List;
12
13 class RecycleViewAdapter extends RecyclerView.Adapter {
14
15 private List mItems;
16
17 RecycleViewAdapter(List items) {
18 mItems = items;
19 }
20
21 @Override
22 public int getItemCount() {
23 return mItems.size();
24 }
25
26 @Override
27 public void onBindViewHolder(@NonNull ItemHolder holder, int position) {
28 //设置Item图⽚
29 holder.image.setImageResource(mItems.get(position).getImageResId());
30 //设置Item⽂字
31 holder.title.setText(mItems.get(position).getTitle());
32 }
33
34 @NonNull
35 @Override
36 public ItemHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
37 return new ItemHolder(LayoutInflater
38 .from(parent.getContext()).inflate(R.layout.item, parent, false));
39 }
40
41 class ItemHolder extends RecyclerView.ViewHolder {
42
43 ImageView image;
44 TextView title;
45
46 ItemHolder(View item) {
47 super(item);
48 image = item.findViewById(R.id.image_view);
49 title = item.findViewById(R.id.text_title);
50 }
51 }
52 }
Item类:
1 package com.cloud.recycleviewdemo;
2
3 class Item {
4
5 private int mImageResId;
6 private String mTitle;
7
8 Item(int imageResId, String title) {
9 mImageResId = imageResId;
10 mTitle = title;
11 }
12
13 public int getImageResId() {
14 return mImageResId;
15 }
16
17 public void setImageResId(int imageResId) {
18 mImageResId = imageResId;
19 }
20
21 public String getTitle() {
22 return mTitle;
23 }
24
25 public void setTitle(String title) {
26 mTitle = title;
27 }
28 }
MainActivity代码: 1 package com.cloud.recycleviewdemo;
2
3 import android.support.v7.app.AppCompatActivity;
4 import android.os.Bundle;
5 import android.support.v7.widget.DefaultItemAnimator;
6 import android.support.v7.widget.LinearLayoutManager;
7 import android.support.v7.widget.RecyclerView;
8
9 import java.util.ArrayList;
10 import java.util.List;
11
12 public class MainActivity extends AppCompatActivity {
13
14 private RecyclerView mRecyclerView;
15 private LinearLayoutManager mLinearLayoutManager;
16 private RecycleViewAdapter mRecycleViewAdapter;
17
18 private List mData;
19
20 @Override
21 protected void onCreate(Bundle savedInstanceState) {
22 super.onCreate(savedInstanceState);
23 setContentView(R.layout.activity_main);
24
25 bindViews();
26 initData();
27 //初始化线性布局管理器
28 mLinearLayoutManager = new LinearLayoutManager(this);
29 //设置布局管理器
30 mRecyclerView.setLayoutManager(mLinearLayoutManager);
31 mRecyclerView.setItemAnimator(new DefaultItemAnimator());
32 //初始化适配器
33 mRecycleViewAdapter = new RecycleViewAdapter(mData);
34 //设置适配器
35 mRecyclerView.setAdapter(mRecycleViewAdapter);
36 }
37
38 private void bindViews() {
39 mRecyclerView = findViewById(R.id.recycle_view);
40 }
41
42 private void initData() {
43 mData = new ArrayList<>();
44 mData.add(new Item(R.drawable.witcher, "The Witcher 3: Wild Hunt"));
45 mData.add(new Item(R.drawable.recore, "Recore"));
46 mData.add(new Item(R.drawable.origins, "Assassin's Creed Origins"));
47 mData.add(new Item(R.drawable.hunter, "theHunter: Call of the Wild"));
48 }
49 }
Item布局:
1
2
3 xmlns:android="http://schemas.android.com/apk/res/android"
4 xmlns:app="http://schemas.android.com/apk/res-auto"
5 xmlns:tools="http://schemas.android.com/tools"
6 android:orientation="vertical"
7 android:layout_width="match_parent"
8 android:layout_height="wrap_content"
9 android:layout_margin="4dp"
10 android:elevation="2dp"
11 android:background="@drawable/background_item">
12
13
14 android:id="@+id/image_view"
15 android:contentDescription="@null"
16 android:layout_width="0dp"
17 android:layout_height="235dp"
18 android:layout_margin="6dp"
19 tools:src="@drawable/witcher"
20 app:layout_constraintTop_toTopOf="parent"
21 app:layout_constraintStart_toStartOf="parent"
22 app:layout_constraintEnd_toEndOf="parent" />
23
24
25 android:id="@+id/text_title"
26 android:layout_width="wrap_content"
27 android:layout_height="wrap_content"
28 android:textSize="18sp"
29 android:textColor="#000000"
30 android:layout_margin="6dp"
31 android:paddingBottom="4dp"
32 app:layout_constraintTop_toBottomOf="@+id/image_view"