RecyclerView+CardView简单使用
RecyclerView取代Listview用来显示数据,除此之外还能实现瀑布流的布局。CardView让我们的界面更好看,此外还将使用官方的下拉刷新。
添加支持:
compile 'com.android.support:recyclerview-v7:+'//不知道版本号直接写+就行
compile 'com.android.support:cardview-v7:+'
效果图:
1、RecyclerView+CardView的普通布局

2、瀑布流布局

3、还有一张用按钮做成的丑丑的瀑布流,可以对比一下

一:recyclerView的使用
其实和listview差不多
1、自定义adapter,比listview的适配器简单很多,并且要求实现viewHolder来优化
2、在activity里面绑定布局,适配器,间距等操作。
适配器代码:
创建viewHolder,绑定数据
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
ArrayList lists;//用于显示的数据
public MyAdapter(ArrayList lists){
this.lists = lists;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//给view设定自定义的布局
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_layout,parent,false);
ViewHolder vh = new ViewHolder(view);
return vh;
}
//绑定viewHolder的操作
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.textView.setText(lists.get(position).toString());//绑定数据
}
@Override
public int getItemCount() {
return lists.size();
}
//自定义的ViewHolder,持有每个Item的的所有界面元素,其实是优化
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView textView;
public ViewHolder(View view){
super(view);
textView = (TextView)view.findViewById(R.id.textview);//实例化
}
}
}
MainActivity代码:
使用listview
recyclerView = (RecyclerView)findViewById(R.id.recycleview);
recyclerView.setLayoutManager(new LinearLayoutManager(this));//线性显示
recyclerView.addItemDecoration(new spaceItemDecoration(30));//设置边距,这个类要自己实现
ArrayList lists = new ArrayList();
for (int i = 0; i < 100; i++) {
lists.add("" + i);
}
//创建并设置Adapter
myAdapter = new MyAdapter(lists);
recyclerView.setAdapter(myAdapter);
边距:
public class spaceItemDecoration extends RecyclerView.ItemDecoration {
int space;
public spaceItemDecoration(int space){
this.space = space;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
//这里就是每个item的边距
outRect.top = space;
outRect.left = space;
outRect.right = space;
outRect.bottom = space;
}
}
二:瀑布流布局
首先要指定布局
recyclerView.setLayoutManager(new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.VERTICAL));//指定只有4列
对于每个item,设置随机高度
public void onBindViewHolder(ViewHolder holder, int position) {
ViewGroup.LayoutParams params = holder.itemView.getLayoutParams();//得到item的LayoutParams布局参数
params.height = (int)(200+Math.random()*400) ;//把随机的高度赋予itemView布局
holder.itemView.setLayoutParams(params);//把params设置给itemView布局
holder.textView.setText(lists.get(position).toString());
}
三:cardview
直接使用就行
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingBottom="5dp"
android:paddingTop="5dp" android:layout_width="match_parent"
android:layout_height="100dp" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textview"
/> </android.support.v7.widget.CardView>
四:官方下拉刷新:
该控件布局要写在recyclerview的外面:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" tools:context="com.example.administrator.recycletest.MainActivity"> <android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/id_swipe_ly"
android:layout_width="match_parent"
android:layout_height="match_parent" > <android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent" android:id="@+id/recycleview" > </android.support.v7.widget.RecyclerView> </android.support.v4.widget.SwipeRefreshLayout> </RelativeLayout>
使用,下拉监听:
swipeRefreshLayout = (SwipeRefreshLayout)findViewById(R.id.id_swipe_ly);
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
Toast.makeText(MainActivity.this,"Refresh!",Toast.LENGTH_SHORT).show();
swipeRefreshLayout.setRefreshing(false);//取消刷新动画
}
});
RecyclerView+CardView简单使用的更多相关文章
- RecyclerView,CardView导入和使用(Demo)
简介: 这篇文章是ANDROID L——Material Design详解(UI控件)的一个补充或者说是应用实例,如果有时间建议大家稍微浏览一下上篇文章. 本文主要介绍Android L新增加的两个U ...
- Material design之New Widgets(RecyclerView CardView)
New Widgets:提供了两个新的控件 RecyclerView CardView 这两个控件包含在了Android L的support library中, 他们可以用于显示复杂的布局而且都默认采 ...
- ANDROID L——RecyclerView,CardView进口和使用(Demo)
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 简单介绍: 这篇文章是ANDROID L--Material Design具体解释(UI控 ...
- [Android]RecyclerView的简单演示样例
去年google的IO上就展示了一个新的ListView.它就是RecyclerView. 下面是官方的说明,我英语能力有限,只是我大概这么理解:RecyclerView会比ListView更具有拓展 ...
- Android RecyclerView 的简单使用
Android L SDK发布的,新API中最有意思的就是RecyclerView (后面为RV) 和 CardView了, 按照官方的说法, RV 是一个ListView 的一个更高级更灵活的一个版 ...
- RecyclerView+Cardview学习探索
1.概述 在support-V7包中引入了很多新的M 控件,其中RccyclerView也是其中一员,它的名字来源于它的工作方式:当一个Item被隐藏起来时候并没有被销毁,当建立新的item时候,组件 ...
- Android零基础入门第71节:CardView简单实现卡片式布局
还记得我们一共学过了多少UI控件了吗?都掌握的怎么样啊. 安卓中一些常用控件学习得差不多了,今天再来学习一个新的控件CardView,在实际开发中也有非常高的地位. 一.CardView简介 Card ...
- 利用RecyclerView CardView实现新闻卡片样式
引入的包: demo结构: 测试代码: News.java: package com.zzw.testcardview; import java.io.Serializable; public cla ...
- RecyclerView 的简单使用
自从 Android 5.0 之后,google 推出了一个 RecyclerView 控件,他是 support-v7 包中的新组件,是一个强大的滑动组件,与经典的 ListView 相比,同样拥有 ...
随机推荐
- Java面向对象的思想
面向对象的思想 1.面向对象的思想的特点: ①符合人们的日常思考习惯 ②能将复杂的问题简单化 ③将原来的执行者变为了现在的指挥者 面向对象的思想,所谓的对象,其实就是实体.对于实物的描述,通常有两个方 ...
- 判断 0 和 '' 以及 empty null false的关系
if('safdasefasefasf'==0) { echo "该字符串转换为数字 等于 0 <br/>"; } //output:该字符串转换为数字 等于零. 这是 ...
- MC的缓存雪崩现象和缓存无底洞的原因以及导致的后果的总结
缓存雪崩一般是由某个缓存节点失效,导致其他节点的缓存命中率下降,缓存中确实的数据去数据库查询,短时间内,造成数据库服务器的崩溃. 这时,我们需要重启数据库,但重启一段时间后,又会被压垮,但此时缓存的数 ...
- ERROR SparkUncaughtExceptionHandler: Uncaught exception in thread
ERROR SparkUncaughtExceptionHandler: Uncaught exception in thread Thread[appclient-registration-retr ...
- HTTP请求之:PHP函数header常用功能
1.页面重定向 当浏览器接受到头信息中的 Location: http://xxxx 后,就会自动跳转到 http://xxxx 指向的URL地址,这点有点类似用 js 写跳转.但是这个跳转只有浏 ...
- Spring中Aware相关接口原理
Spring中提供一些Aware相关接口,像是BeanFactoryAware. ApplicationContextAware.ResourceLoaderAware.ServletContextA ...
- Ruby-调用windows窗体
发现SharpDevelop 也支持Ruby ,特别是可以直接把winform的控件直接用在 require "mscorlib" require "System.Win ...
- css小tip
1. <input>标签的默认样式 当在页面中添加一个input标签,当点击输入框时会有一个外边框包裹着,可以使用 : input { outline: none} 去除点击时产生的外边框 ...
- web工程中URL地址的推荐写法
三.web工程中URL地址的推荐写法 使用c标签<c:url value="" /> 会自动添加项目名 -> value中的值 前面要加 “/” 在JavaWeb ...
- shell脚本学习(一)
Shell脚本最常用于系统管理工作,或者用于结合现有的程序以完成小型.特定的工作. Shell的特点有: 1. 简单性 2. 可移植性 3. 开发容易 [什么是shell] 简单点理解,就是系统跟计算 ...