Android Studio2.2.2下RecyclerView的使用
1,概述
RecyclerView可以完全代替ListView、GridView,整体上看RecyclerView架构,提供了一种插拔式的体验,高度的解耦,异常的灵活,通过设置它提供的不同LayoutManager,ItemDecoration , ItemAnimator实现很多让人惊艳的效果,而且实现效果也是非常的简单。(随便百度了一段话)
2,直接进入使用篇:
首先,创建好project
我们要想使用它,就要添加相应的依赖库。右击app


点那个加号,找到
3,代码部分很简洁,只放了一个简单的绑定数据,后续的在学习,现在只是搞清楚这个布局如何呈现出了,然后能够呈现一定的内容~
代码部分有注释,就不说什么了。
package examples.ouc.com.learnrv; import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView; public class MainActivity extends AppCompatActivity { //用来代替ListView
private RecyclerView rv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
rv= new RecyclerView(this);
setContentView(rv); rv.setLayoutManager( new LinearLayoutManager(this)); rv.setAdapter(new RecyclerView.Adapter() { class ViewHolder extends RecyclerView.ViewHolder{ private TextView tv;
public ViewHolder(TextView itemView) {
super(itemView);
tv = itemView;
} public TextView getTv() {
return tv;
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewHolder(new TextView(parent.getContext()));
} @Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
ViewHolder vh = (ViewHolder) holder;
vh.getTv().setText("item "+position);
} //huoqu ziduixiang shuliang
@Override
public int getItemCount() {
return 10;
}
});
}
}
MainActivity
4,上述书通过直接代码创建布局,然后载入,但是大部分时间,还是通过xml布局文件控制比较方便
我们首先将上面的代码进行一下重构,将adapter冲构成一个类,使代码更简洁~
这里面有很多注释之类的,是跟着极客学院学习时候留下的,不过没有影响,这只会影响我们的布局情况,并不会影响实现功能!
package examples.ouc.com.learnrecylerview; import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView; public class MainActivity extends AppCompatActivity { private RecyclerView rv; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); rv = new RecyclerView(this);
setContentView(rv); //设置布局
//第一个参数获取布局,第二个参数表示数值还是水平,第三个是否反转
// rv.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL,false)); //第一个参数获取布局,第二个表示有几列(默认是垂直方向)
rv.setLayoutManager(new GridLayoutManager(this,3)); //rv.setLayoutManager(new GridLayoutManager(this,3,LinearLayoutManager.HORIZONTAL,false));
//添加内容
rv.setAdapter(new MyAdapter());
} }
MainActivity
然后是MyAdapter
package examples.ouc.com.learnrecylerview; import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView; import org.w3c.dom.Text; /**
* Created by Huskyboy on 2016/11/19.
*/
class MyAdapter extends RecyclerView.Adapter { class ViewHolder extends RecyclerView.ViewHolder {
//绑定子对象的视图
private View root;
private TextView tvTitle,tvContent; public ViewHolder(View root) {
super(root);
tvTitle = (TextView) root.findViewById(R.id.tvTitle);
tvContent = (TextView) root.findViewById(R.id.tvContent);
} public TextView getTvContent() {
return tvContent;
} public TextView getTvTitle() {
return tvTitle;
}
} //创建holder
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//布局解析器
return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.list_cell,null));
} //对holder的textView进行操作
@Override
//第一个参数是我们绑定的holder
//第二个是一个索引,我们的当前初始化的数据是哪一条
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { //注意这里引入的ViewHolder类是我们上面创建的类,不要加错包
ViewHolder vh = (ViewHolder) holder; CellData cd = data[position];
vh.getTvTitle().setText(cd.title);
vh.getTvContent().setText(cd.content); } //获取RecylerView子对象数量
@Override
public int getItemCount() {
return data.length;
} private CellData[] data = new CellData[]{new CellData("iCyhuSky"," 1995-06-19"),
new CellData("news ", "Nice")};
}
MyAdapter.java
CellData.java
package examples.ouc.com.learnrecylerview; /**
* Created by Huskyboy on 2016/11/19.
*/ public class CellData {
public CellData(String title, String content){
this.content = content;
this.title = title;
} public String title = "title";
public String content = "content";
}
CellData.java
布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"> <TextView
android:text="tvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tvTitle" /> <TextView
android:text="tvComtent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tvContent" />
</LinearLayout>
list_cell.xml
5,这里注意一点是,在重写MyAdapter的时候,
public int getItemCount() {
return data.length;
}
这个返回的数量一定要与Data数组相对应,否则会报错,无法加载布局!
最后附上CSDN上面一些大神的讲解
http://so.csdn.net/so/search/s.do?ref=toolbar&q=RecyclerView&ref=toolbar&q=RecyclerView
Android Studio2.2.2下RecyclerView的使用的更多相关文章
- Android Studio2.1.2 Java8环境下引用Java Library编译出错
转载请注明出处:http://www.cnblogs.com/LT5505/p/5685242.html 问题:在Android Studio2.1.2+Java8的环境下,引用Java Librar ...
- Android开发学习之路-RecyclerView滑动删除和拖动排序
Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...
- Android studio2.2 ndk 错误 :format not a string literal and no format arguments!
在Android Studio2.2 进行NDK编程,在对*char 字符串 进行日志输出时,报错: error: format not a string literal and no format ...
- Android Studio2.x版本无法自动关联源码的解决方法
Android Studio2.x版本无法自动关联源码的解决方法 在学习android开发过程中,对于一个不熟悉的类,阅读源码是一个很好的学习方式,使用andorid studio开发工具的SDK M ...
- Android Studio2.0 教程MAC版 -快捷键篇
本文转至 Android Studio2.0 教程从入门到精通MAC版 - 提高篇 ( OPEN 开发经验库) 第二篇我们开发了一个Hello World应用,并介绍Android Sutdio的界面 ...
- android studio2.0出现的gradle问题,instant Run即时运行不了.
android studio 2.0出现的gradle问题: instant Run即时运行不了.经历了几乎9个preView版本的AS2.0,终于迎来了正式版,然而晴天我的霹雳,好不容易装好的2.0 ...
- 【Android Studio安装部署系列】三十、从Android studio2.2.2升级到Android studio3.0之路
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 Android Studio 3.0的新功能 https://mp.weixin.qq.com/s/2XmVG4mKEDX6-bvZ ...
- Android Studio2.0 教程从入门到精通Windows版 - 入门篇
http://www.open-open.com/lib/view/open1468121363300.html 本文转自:深度开源(open-open.com)原文标题:Android Studio ...
- 在Android Studio2.3中配置OpenCV4Android SDK
在Android Studio2.3中配置OpenCV4Android SDK 一,OpenCV4Android下载地址 [2.4.11]http://onhdz331f.bkt.clouddn.co ...
随机推荐
- 不在折腾---hbase-0.96.2-hadoop2
首先安装好zookeeper集群 上传hbase安装包 解压 配置hbase集群,要修改3个文件 * 修改hbase-env.sh 设置JAVA_HOME: export JAVA_HOME=... ...
- log4net RemotingAppender 的配置
Before you even start trying any of the alternatives provided, ask yourself whether you really need ...
- get github
Git是一个分布式的版本控制系统,最初由Linus Torvalds编写,用作Linux内核代码的管理.在推出后,Git在其它项目中也取得了很大成功,尤其是在Ruby社区中.目前,包括Rubinius ...
- Shell中的空格和引号
空格对于linux的shell是一种很典型的分隔符,所以给变量赋值的时候中间不能够有空格.而单引号和双引号,都是为了解决中间有空格的问题.比如string1=this is a string,这样执行 ...
- POJ 2923 状压好题
Relocation Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2631 Accepted: 1075 Descri ...
- 【C#】 格式化说明符 string.Format WriteLine
定义 格式说明符的语法由3个字段组成:索引号.对齐说明符和格式字段.String.Format和WriteLine都遵守同样的格式化规则. 对齐说明符 对齐说明符表示了字段中字符的最小宽度.对齐说明符 ...
- openssl
openssl genrsa -des3 -out server.key 1024openssl req -new server.key -out servr.csr seserver-fnamese ...
- 用JS获取地址栏参数的方法(超级简单)
方法一:采用正则表达式获取地址栏参数:( 强烈推荐,既实用又方便!) function GetQueryString(name) { var reg = new RegExp("( ...
- 获取数据库表详细信息、存储过程、视图、的sql
select s.[name] + '.' + t.[name] as tablename from sys.tables as t,sys.schemas as s where t.schema_i ...
- CSS-position详解
position属性 position属性可以调整DOM元素在浏览器中的位置,能够很好的体现HTML普通流这个特征.重点在于应用了不同的position值之后是否有脱离普通流和改变Display属性这 ...