RecyclerView使用——入门篇
来源:互联网 发布:手机遥控玩具车软件 编辑:程序博客网 时间:2024/06/15 22:03
简述
RecyclerView类似于ListView和GridView,但又因为的可定制性等等优于ListView和GridView,是一个相当强大的控件。所以今天来实现一个简单的RecycleView,如下图所示
XML文件
主要由以下两个xml文件组成
- activity_main.xml:顾名思义是主界面的布局文件
- list_item_layout:这个是RecyclerView中item的布局文件
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:layout_height="match_parent" android:layout_width="match_parent" android:id="@+id/recyclerView" android:scrollbars="vertical" android:scrollbarFadeDuration="1" /></RelativeLayout>
list_item_layout
<?xml version="1.0" encoding="utf-8"?><android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_height="96dp" android:layout_width="match_parent" xmlns:fresco="http://schemas.android.com/tools" android:focusable="true" android:clickable="true" android:foreground="?android:attr/selectableItemBackground" app:cardCornerRadius="4dp" app:cardElevation="1dp" app:cardPreventCornerOverlap="true" android:layout_marginTop="8dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:paddingLeft="8dp" android:paddingRight="8dp"> <TextView android:id="@+id/textViewTitle" android:layout_width="0dp" android:layout_height="match_parent" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:layout_weight="1" android:ellipsize="end" android:gravity="center_vertical" android:maxLines="3" android:paddingBottom="8dp" android:paddingTop="8dp" android:textSize="18sp" /> <ImageView android:id="@+id/image" android:layout_width="80dp" android:layout_height="80dp" android:layout_gravity="center_vertical" android:src="@drawable/fail" /> </LinearLayout></android.support.v7.widget.CardView>
这里用CardView,需要添加依赖
compile 'com.android.support:cardview-v7:26.0.0-alpha1'
CardView是一个很实用的东西,可以实现很多效果,这里只讲RecyclerView,所以就不详细介绍了
java文件
主要也是有两个
- MainActivity.java : 主Activity
- MyAdapter.java:自己定制所需的适配器
先从MyAdapter介绍:
- 首先要定义一个MyHolder,我把它理解成一个item的容器,里面把每个item中的组件先初始化
/ ** * 自定义Holder */ public class MyHolder extends RecyclerView.ViewHolder implements RecyclerView.OnClickListener{ ImageView imageView; TextView title; public MyHolder(View itemView) { super(itemView); imageView = (ImageView) itemView.findViewById(R.id.image); title = (TextView) itemView.findViewById(R.id.textViewTitle); itemView.setOnClickListener(this); } @Override public void onClick(View v) { } }
- 第二步将建立的MyAdapter继承RecyclerView.Adapter
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyHolder>
- 最后在onBindViewHolder(MyHolder holder, final int position) 方法中实现自己想要显示的内容,以及OnClick事件,如:
@Override public void onBindViewHolder(MyHolder holder, final int position) { holder.title.setText(list.get(position)); // holder.imageView.setImageDrawable(R.drawable.test_image); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(context,list.get(position)+"被点击",Toast.LENGTH_LONG).show(); } }); }
完整MyAdapter.java
package com.recyclerviewtest;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.ImageView;import android.widget.TextView;import android.widget.Toast;import java.util.ArrayList;/** * Created by asus on 2017/3/21. */public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyHolder> { private ArrayList<String> list; private final Context context; private final LayoutInflater inflater; public MyAdapter(Context context, ArrayList<String> list){ this.context = context; this.list = list; inflater = LayoutInflater.from(context); } /** * 创建Holder * @param parent * @param viewType * @return */ @Override public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = inflater.inflate(R.layout.list_item_layout,parent,false); return new MyHolder(view); } @Override public void onBindViewHolder(MyHolder holder, final int position) { holder.title.setText(list.get(position)); // holder.imageView.setImageDrawable(R.drawable.test_image); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(context,list.get(position)+"被点击",Toast.LENGTH_LONG).show(); } }); } @Override public int getItemCount() { return list.size(); } /** * 自定义Holder */ public class MyHolder extends RecyclerView.ViewHolder implements RecyclerView.OnClickListener{ ImageView imageView; TextView title; public MyHolder(View itemView) { super(itemView); imageView = (ImageView) itemView.findViewById(R.id.image); title = (TextView) itemView.findViewById(R.id.textViewTitle); itemView.setOnClickListener(this); } @Override public void onClick(View v) { } }}
MainActivity里面的操作
- 设置布局管理器
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
- 设置Adapter
mRecyclerView.setAdapter(myAdapter);
完整MainActivity.java
package com.recyclerviewtest;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import java.util.ArrayList;public class MainActivity extends AppCompatActivity { private RecyclerView mRecyclerView; private MyAdapter myAdapter; private ArrayList<String> list = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView); //设置布局管理器 mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); for(int i =0;i<20;i++){ list.add("这是标题"+i); } myAdapter = new MyAdapter(this,list); //设置Adapter mRecyclerView.setAdapter(myAdapter); }}
最后说一句
这里就先简单实现一下RecyclerView的用法,与ListView非常相像,接下来将会更新如果在RecyclerView中如何加入头布局,例如加上一个图像浏览的ViewPager,还有瀑布流布局。
阅读全文
0 0
- RecyclerView使用——入门篇
- RecyclerView的入门使用
- Android——RecyclerView入门学习之RecyclerView.Adapter
- Kotlin入门系列教程—RecyclerView
- Materail Design 入门(十)—— RecyclerView的使用(一)
- Materail Design 入门(十)—— RecyclerView的使用(二)万能分隔线
- Android Kotlin入门(RecyclerView的使用)
- RecyclerView的使用——简单例子
- RecyclerView使用介绍——企业实用
- android 5.x—RecyclerView使用介绍
- Android——RecyclerView入门学习之LayoutManager
- Android——RecyclerView入门学习之ItemDecoration
- RecyclerView入门
- RecyclerView入门
- RecyclerView(入门)
- RecyclerView(一)——初探RecyclerView
- Android L——RecyclerView,CardView的导入和使用
- Android框架之路——RecyclerView的使用
- java se TCP上传文件
- 贪心算法(上)
- 100. Same Tree
- Angular中ng-repeat与ul li的多层嵌套
- 在centos7上搭建hadoop集群
- RecyclerView使用——入门篇
- AtCoder Grand Contest 018 A
- 亚信实习第二周(7.17-7.23)
- java多线程一(基础篇)
- CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?
- #bzoj3037#无线电通信(DP)
- BZOJ 2002 Bounce 弹飞绵羊 —— 分块算法
- Meteor常用的命令
- JDBC