Android RecycleView + CardView 控件简析
今天使用了V7包加入的RecycleView 和 CardView,写篇简析。
先上效果图:

原理图:
这是RecycleView的工作原理:
1.LayoutManager用来处理RecycleView的“列表”样式,Support包默认包含了:LinearLayoutManager 横向或纵向的滚动列表、
GridLayoutManager 网格列表、StaggeredGridLayoutManager 交错的网格列表。
2.Adapter负责处理RecycleView的数据和样式
3.在传统的ListView中有一种常见的写法是使用ViewHolder来缓存数据集,在新版的RecycleView内置了ViewHolder这一模块,所以在Adapter内部新建内部类ViewHolder。
4.RecycleView 和listView的一个区别就是本身不处理点击事件,点击事件应该绑在ViewHolder里面,可以直接写也可以通过接口绑在Adapter里面来实现。
首先添加数据集:
package com.lfk.drawapictiure.Info; /**
* Created by liufengkai on 15/9/13.
*/
public class MenuInfo {
private String paint_name;
private String paint_time;
private String paint_root;
private String paint_img_root; public MenuInfo(String paint_name, String paint_time,
String paint_root, String paint_img_root) {
this.paint_name = paint_name;
this.paint_time = paint_time;
this.paint_root = paint_root;
this.paint_img_root = paint_img_root;
} public String getPaint_name() {
return paint_name;
} public String getPaint_time() {
return paint_time;
} public String getPaint_root() {
return paint_root;
} public String getPaint_img_root() {
return paint_img_root;
}
}
实现继承自RecycleView的Adapter中间要包裹自己实现的ViewHolder,onCreateviewHolder函数和onBindViewHolder实现了ListView里面getView的工作,分别为找到控件和控件赋值,
实现点击的接口,设置接口并且绑在ViewHolder的itemView里面即根视图中
public class MainLayoutAdapter extends RecyclerView.Adapter<MainLayoutAdapter.MainViewHolder> {
private LayoutInflater inflater;
private ArrayList<MenuInfo> userList;
private Context context;
private MainItemClickListener itemClickListener;
public MainLayoutAdapter(ArrayList<MenuInfo> userList, Context context) {
this.userList = userList;
this.context = context;
this.inflater = LayoutInflater.from(context);
}
public void setItemClickListener(MainItemClickListener itemClickListener) {
this.itemClickListener = itemClickListener;
}
//onCreateviewHolder函数和onBindViewHolder实现了ListView里面getView的工作,分别为找到控件和控件赋值
@Override
public MainLayoutAdapter.MainViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View wrapper = inflater.inflate(R.layout.draw_item, parent, false);
return new MainViewHolder(
wrapper,
(TextView)wrapper.findViewById(R.id.paint_name),
(TextView)wrapper.findViewById(R.id.paint_time),
(TextView)wrapper.findViewById(R.id.paint_root),
(ImageView)wrapper.findViewById(R.id.paint_img));
}
@Override
public void onBindViewHolder(MainViewHolder holder, int position) {
MenuInfo menuInfo = userList.get(position);
holder.paint_img.setImageURI(Uri.parse(menuInfo.getPaint_img_root()));
holder.paint_name.setText(menuInfo.getPaint_name());
holder.paint_time.setText(menuInfo.getPaint_time());
holder.paint_root.setText(menuInfo.getPaint_root());
}
@Override
public int getItemCount() {
return userList.size();
}
public class MainViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener,View.OnLongClickListener{
private TextView paint_name;
private TextView paint_time;
private TextView paint_root;
private ImageView paint_img;
public MainViewHolder(View itemView, TextView paint_name,
TextView paint_time, TextView paint_root,
ImageView paint_img) {
super(itemView);
itemView.setOnClickListener(this);
this.paint_name = paint_name;
this.paint_time = paint_time;
this.paint_root = paint_root;
this.paint_img = paint_img;
}
@Override
public void onClick(View view) {
MenuInfo menuInfo = userList.get(getAdapterPosition());
itemClickListener.onItemClick(view,menuInfo.getPaint_name(),menuInfo.getPaint_root());
}
@Override
public boolean onLongClick(View view) {
return false;
}
}
}
Activity中的使用:
package com.lfk.drawapictiure.Fragment; import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup; import com.lfk.drawapictiure.Adapter.MainLayoutAdapter;
import com.lfk.drawapictiure.Info.MenuInfo;
import com.lfk.drawapictiure.InterFace.MainItemClickListener;
import com.lfk.drawapictiure.MainActivity;
import com.lfk.drawapictiure.R; import java.util.ArrayList; public class PaintFragment extends android.support.v4.app.Fragment {
private RecyclerView mRecyclerView;
private MainLayoutAdapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
private String path = Environment.getExternalStorageDirectory().getPath() + "/DrawAPicture"; public static PaintFragment newInstance() {
return new PaintFragment();
} public PaintFragment() {
// Required empty public constructor
} @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); } @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View wrapper = inflater.inflate(R.layout.fragment_paint, container, false);
mRecyclerView = (RecyclerView)wrapper.findViewById(R.id.paint_recycle_view);
mLayoutManager = new LinearLayoutManager(getActivity());
mRecyclerView.setLayoutManager(mLayoutManager); //绑上列表管理器
ArrayList<MenuInfo> arrayList = new ArrayList<>();
arrayList.add(new MenuInfo("刘丰恺","09-13 05:28",path+"/"+"12138.lfk",path+"/"+"6826.jpg"));
arrayList.add(new MenuInfo("刘丰恺","09-13 05:28",path+"/"+"12138.lfk",path+"/"+"6826.jpg"));
arrayList.add(new MenuInfo("刘丰恺","09-13 05:28",path+"/"+"12138.lfk",path+"/"+"6826.jpg"));
arrayList.add(new MenuInfo("刘丰恺","09-13 05:28",path+"/"+"12138.lfk",path+"/"+"6826.jpg"));
mAdapter = new MainLayoutAdapter(arrayList, getActivity());
// 设置点击事件
mAdapter.setItemClickListener(new MainItemClickListener() {
@Override
public void onItemClick(View view, String name, String path) {
Intent intent = new Intent(getActivity(), MainActivity.class);
intent.setData(Uri.parse(path));
startActivity(intent);
}
});
//绑定数据集
mRecyclerView.setAdapter(mAdapter); return wrapper;
} }
其中的子布局使用了CardView:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:background="@drawable/list_item_selector"
android:layout_width="match_parent"
android:layout_height="wrap_content"
card_view:cardCornerRadius="4dp"
card_view:
android:layout_margin="@dimen/card_margin">
<RelativeLayout
android:layout_marginTop="16dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginBottom="16dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:maxHeight="100dp"
android:layout_marginTop="8dp"
android:layout_below="@+id/line_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/paint_img"
android:src="@mipmap/ic_launcher" />
<TextView
android:id="@+id/paint_name"
android:textColor="#000"
android:textSize="18sp"
android:text="项目名"
android:layout_alignParentRight="true"
android:singleLine="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/paint_time"
android:text="项目时间"
android:textColor="@color/black"
android:textSize="18sp"
android:singleLine="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<View
android:id="@+id/line_view"
android:background="@color/gray"
android:layout_below="@+id/paint_time"
android:layout_width="match_parent"
android:layout_height="1dp"/>
<TextView
android:id="@+id/paint_root"
android:visibility="invisible"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout> </android.support.v7.widget.CardView>
我设置的东西只有:
card_view:cardCornerRadius="4dp" //设定圆角半径
card_view:cardElevation="8dp"//设定阴影
Android RecycleView + CardView 控件简析的更多相关文章
- RecycleView + CardView 控件简析
今天使用了V7包加入的RecycleView 和 CardView,写篇简析. 先上效果图: 原理图: 这是RecycleView的工作原理: 1.LayoutManager用来处理RecycleVi ...
- Flutter样式和布局控件简析(二)
开始 继续接着分析Flutter相关的样式和布局控件,但是这次内容难度感觉比较高,怕有分析不到位的地方,所以这次仅仅当做一个参考,大家最好可以自己阅读一下代码,应该会有更深的体会. Sliver布局 ...
- [Android] Android 卡片式控件CardView的优雅使用
[Android] Android 卡片式控件CardView的优雅使用 CardView是在安卓5.0提出的卡片式控件 其具体用法如下: 1.在app/build.gradle 文件中添加 comp ...
- 【转】Android M新控件之FloatingActionButton,TextInputLayout,Snackbar,TabLayout的使用
Android M新控件之FloatingActionButton,TextInputLayout,Snackbar,TabLayout的使用 分类: Android UI2015-06-15 16: ...
- 介绍三个Android支持库控件:TabLayout+ViewPager+RecyclerView
本文主要介绍如下三个Android支持库控件的配合使用: TabLayout:android.support.design.widget.TabLayout ViewPager:android.sup ...
- Android笔记---常用控件以及用法
这篇文章主要记录下Android的常用控件以及使用的方法,Android 给我们提供了大量的UI控件,合理地使用这些控件就可以非常轻松地编写出相当不错的界面,这些是Android学习的基础,没有什么业 ...
- Android 中常见控件的介绍和使用
1 TextView文本框 1.1 TextView类的结构 TextView 是用于显示字符串的组件,对于用户来说就是屏幕中一块用于显示文本的区域.TextView类的层次关系如下: java.la ...
- Android中ListView控件的使用
Android中ListView控件的使用 ListView展示数据的原理 在Android中,其实ListView就相当于web中的jsp,Adapter是适配器,它就相当于web中的Servlet ...
- 五、Android学习第四天补充——Android的常用控件(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 五.Android学习第四天补充——Android的常用控件 熟悉常用的A ...
随机推荐
- [FlyCapture2] Bumblebee XB3 Save Images to Three AVI Files (Left, Center and Right) 大黄蜂立体相机保存捕获的视频到左中右三个不同的文件
PointGreyResearch是世界领先的致力于开发高级数字相机产品的公司.PointGrey产品涉及IEEE-1394相机.立体视觉相机和360度全景数字视频相机.其中二代和三代的大黄蜂立体相机 ...
- PCL 1.4.0 VS 2010 Configuration
Open VS2010, create a new project, then open Property Manager, double-click Microsoft.Cpp.win32.user ...
- 转simhash与重复信息识别
simhash与重复信息识别 在工作学习中,我往往感叹数学奇迹般的解决一些貌似不可能完成的任务,并且十分希望将这种喜悦分享给大家,就好比说:“老婆,出来看上帝”…… 随着信息爆炸时代的来临,互联网上充 ...
- 是否允许处理由Zend Encoder加密的PHP文件
Zend Optimizer是由PHP核心引擎"Zend"创建者Zend技术公司所开的免费PHP优化软件.据Zend公司透露使用这个软件某些情况下至少可以提高性能30%以上!Zen ...
- 字符串&数组的相互转换
字符串 -> 数组 方法一: $str = "abcd" $s2 = $str.GetEnumerator() #$s2是无法使用下标的方式进行索引的,因为其不是array ...
- Yii2.0 URL美化
1. 程序初始化注册文件,加入如下: 'urlManager' =>[ 'class' => 'yii\web\UrlManager', 'showScriptName' =>fal ...
- Scrum会议5(Beta版本)
组名:天天向上 组长:王森 组员:张政.张金生.林莉.胡丽娜 代码地址:HTTPS:https://git.coding.net/jx8zjs/llk.git SSH:git@git.coding.n ...
- MySQL 数据库设计 笔记与总结(1)需求分析
数据库设计的步骤 ① 需求分析 ② 逻辑设计 使用 ER 图对数据库进行逻辑建模 ③ 物理设计 ④ 维护优化 a. 新的需求进行建表 b. 索引优化 c. 大表拆分 [需求分析] ① 了解系统中所要存 ...
- 同IP不同端口Session冲突问题
同IP不同端口Session冲突问题 分类: tomcat2013-09-24 11:19 1146人阅读 评论(0) 收藏 举报 一个服务器上搭建了多个tomcat或者weblogic,端口不一样, ...
- cPanel设置自定义404错误页
利用这个cpanel的错误页工具,你就可以定制错误页面了.设置自定义404错误页,有两种简单的方法. 一,利用cpanel后台控制面板添加设置404自定义错误页的方法 步骤 1.登录cPa ...