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 ...
随机推荐
- lucene 建立索引的不同方式
1.创建一个简单的索引: package lia.meetlucene; import java.io.File; import org.apache.lucene.document.Document ...
- 修改CSV中的某些值 -- 1
修改前: col1,col2,col3,col4 text1,text2,text3,text4 text5,text6,text7,text8 text9,text10,text11,text12 ...
- Web 在线文件管理器学习笔记与总结(7)重命名文件
rename($oldname,$newname) 重命名文件或目录 <<<EOF EOF; 使用heredoc 技术,来部分实现界面与代码的准分离 重命名时,需要验证新文件名的合法 ...
- python 使用多线程进行压力测试
#coding=utf-8 import urllib2 import threading import time TOTAL = 0 #总数 SUCC = 0 #响应成功数 FAIL = 0 #响应 ...
- Web 软件测试 Checklist 应用系列,第 1 部分: 数据输入
Web 软件测试 Checklist 应用系列,第 1 部分: 数据输入 本文为系列文章"Web 软件测试 Checklist 应用系列"中的第一篇.该系列文章旨在阐述 Check ...
- Nginx部署ThinkPHP项目的办法
thinkphp config配置: ', //URL模式 nginx rewrite配置: location / { if (!-e $request_filename) { rewrite ^(. ...
- composer autoload
1.引入autoload 文件 include “vendor/autoload.php” 2.自定义的单文件引入 “autoload”:{ "files":["lib/ ...
- P2661 信息传递 TODO-TARJAN算法
http://www.cnblogs.com/zbtrs/p/5762788.html http://blog.csdn.net/loi_yzs/article/details/52795093 都是 ...
- Delphi下使用MapWinGIS控件打开GIS图层
unit Unit3; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System ...
- mysql中文字段转拼音首字母,以及中文拼音模糊查询
创建存储过程,将中文字段转拼音首字母 CREATE DEFINER=`root`@`%` FUNCTION `fristPinyin`(P_NAME VARCHAR(255)) RETURNS var ...