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

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

也可进行下面的操作





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

<LinearLayout xmlns: 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源码
<LinearLayout xmlns: 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 class RecycleViewAdapter extends RecyclerView.Adapter<RecycleViewAdapter.myViewHoder>{

private Context context ; //上下文。这个说起来有点抽象,等你来实验室给你说
private List<FileInfo> fileInfos ; //列表的信息用List来保存,不会用没关系,我等等会说。
public RecycleViewAdapter (Context context , List<FileInfo> fileInfos) {
this . context = context ;
this . fileInfos = fileInfos ;
}
//创建一个ViewHolder
@Override
public myViewHoder onCreateViewHolder (ViewGroup parent , int viewType) {
View v = LayoutInflater. from (parent.getContext()).inflate(R.layout. item_recyclerview , null, false ) ;
return new myViewHoder(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( new View.OnClickListener() {
@Override
public void onClick (View v) {
//点击下载后应该做什么???
}
}) ;
}
@Override
public int getItemCount () {
return fileInfos .size() ; //列表显示的长度
}
class myViewHoder extends RecyclerView.ViewHolder{
TextView tvTitle ; //标题
TextView tvDate ; //时间
TextView tvDownload ; //下载
public myViewHoder (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 class RecycleViewActivity extends AppCompatActivity {
private RecyclerView recyclerView ;
private List<FileInfo> fileInfos ;
@Override
protected void onCreate ( @Nullable Bundle savedInstanceState) {
super .onCreate(savedInstanceState) ;
setContentView(R.layout. activity_recylerview ) ;

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

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

}
}


等待更新.......

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值