RecycleView的使用--material design风格 列表显示

本文详细介绍如何使用Android的RecycleView组件实现数据展示功能,包括引入依赖、布局配置、Adapter编写及Activity中的数据绑定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RecyleView 的使用
首先要先导包
可以在gradle中直接输入
compile'com.android.support:recyclerview-v7:24.2.1'

也可进行下面的操作





导入包后,我们就可以使用RecycleView了
我们先建一个
acvtivity_recyclerview.xml

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/tvRecyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>

我们新建一个
item.xml中,就是显示在列表中的内容,看下图解析

在item。xml中有用到CardView(当然你可以选择不用,只是为了美观);
如果需要用到CardView,也需要在build.gradle中导入CardView的包
compile'com.android.support:cardview-v7:24.2.1'

item.xml源码
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.CardView
android:layout_margin="16dp"
android:layout_width="match_parent"
android:layout_height="80dp">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="70dp"
android:background="@mipmap/word"
android:layout_height="70dp"
/>
<LinearLayout
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent">
<TextView

android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:text="我是大辣鸡的男神"
android:textSize="22sp"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="1996/7/26"
android:layout_marginRight="26dp"
android:gravity="right"
/>
<TextView
android:layout_width="match_parent"
android:text="下载"
android:layout_marginTop="16dp"
android:gravity="right"
android:layout_marginRight="6dp"
android:textColor="@color/colorPrimary"
android:layout_height="wrap_content"
/>
</LinearLayout>
</LinearLayout>
</android.support.v7.widget.CardView>

</LinearLayout>


好了,布局我们已经写好,接下来是java代码的问题了。在使用RecycleView的时候,当然和ListView一样,需要用到Adapter。
Adapter是将数据绑定到UI界面上的桥接类。Adapter负责创建显示每个项目的子View和提供对下层数据的访问。 
在多数情况下,你不需要创建自己的Adapter。Android提供了一系列Adapter来将数据绑定到UI Widget上。 

因为Android负责提供数据和选择用于显示每个项目的View,所以Adapter能快速地修改要绑定的控件的外观和功能。
如果你还觉得太抽象,等下就回明了。

首先,辣鸡你要分析这个item里面,有什么内容,需要做什么。例如,item里面有标题,日期,下载选项,还有一个图片。由于下载的文件格式可能很多种,那么我们需要给每一种都赋予一个不一样的图片。例如,Word的,显示word的图片,ppt显示ppt 的图片。这样就很明了了。还有,不同文件标题也是不一样的。
显示图片,当然是判断文件的后缀咯,所以需要有一个变量来保存文件后缀(其实也可以不要,你可以思考一下)然后下载的文件也需要有文件路径,所以现在应该有的四个变量应该是
标题 Title 日期 Date 地址 Url 文件后缀 Suffix
那么,如果你还是每一个文件信息就创建四个变量,不仅代码看起来不好看,还很占内存。所以,我们需要把这四个成员给封装成一个类。我就叫他FileInfo把(其实叫laji还好)


好了,现在我们可以进行Adapter的编写,辣鸡你需要一个继承自RecyclerView.Adapter的适配器,作用是将数据与每一个item的界面进行绑定。
我们就把这适配器就做LaJiAdapter吧




/**
* Created by jian on 2016/11/26.
*/
public classRecycleViewAdapterextendsRecyclerView.Adapter<RecycleViewAdapter.myViewHoder>{

privateContextcontext;//上下文。这个说起来有点抽象,等你来实验室给你说
privateList<FileInfo>fileInfos;//列表的信息用List来保存,不会用没关系,我等等会说。
publicRecycleViewAdapter(Context context,List<FileInfo> fileInfos) {
this.context= context;
this.fileInfos= fileInfos;
}
//创建一个ViewHolder
@Override
publicmyViewHoderonCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recyclerview, null, false);
return newmyViewHoder(v);
}
//为Viewhoder绑定数据,position个就是表示是第几个。0代表列表的第一个
@Override
public void onBindViewHolder(myViewHoder holder, int position) {
FileInfo fileInfo =fileInfos.get(position);//获取当前位置上的文件信息
holder.tvTitle.setText(fileInfo.getmTitle());
holder.tvDate.setText(fileInfo.getmDate());
holder.tvDownload.setOnClickListener(newView.OnClickListener() {
@Override
public void onClick(View v) {
//点击下载后应该做什么???
}
});
}
@Override
public int getItemCount() {
returnfileInfos.size();//列表显示的长度
}
classmyViewHoderextendsRecyclerView.ViewHolder{
TextViewtvTitle;//标题
TextViewtvDate;//时间
TextViewtvDownload;//下载
publicmyViewHoder(View itemView) {
super(itemView);
tvTitle= (TextView) itemView.findViewById(R.id.tvTitle);
tvDate= (TextView) itemView.findViewById(R.id.tvDate);
tvDownload= (TextView) itemView.findViewById(R.id.tvDownload);
}
}
}
PS:
RecyclerView子View宽度不能全屏的问题,在Adapter的onCreateViewHolder创建子view的时候要把parent传进去; 
正确写法
LayoutInflater.from(context).inflate(R.layout.item_view,parent,false);
错误写法
LayoutInflater.from(context).inflate(R.layout.item_view,null);


Activity中的代码
/**
* Created by jian on 2016/11/26.
*/

public classRecycleViewActivityextendsAppCompatActivity {
privateRecyclerViewrecyclerView;
privateList<FileInfo>fileInfos;
@Override
protected void onCreate(@NullableBundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recylerview);

initView();
initData();
}
//绑定数据
private void initData() {
fileInfos=newArrayList<>();
//先用个假数据吧
for(inti =0;i<10;i++){
FileInfo fileInfo =newFileInfo("标题标题","1996/7/26",null,null);//最后面的url和后缀设为空 ,因为还没有嘛
fileInfos.add(fileInfo);
}
RecycleViewAdapter adapter =newRecycleViewAdapter(this,fileInfos);
recyclerView.setAdapter(adapter);//把适配器绑定给recycleView
recyclerView.setLayoutManager(newLinearLayoutManager(this));//设置为列表显示
}

private void initView() {
recyclerView= (RecyclerView) findViewById(R.id.RecyclerView);

}
}


等待更新.......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值