Android之RecyclerView入门
首先来实现最简单的列表展示,如图
在这个展示中,RecyclerView的作用仅限于回收和定位屏幕上的TextView,在用户滑动屏幕时,会把上一个视图回收掉,并显示下一个页面的视图,也就是回收再利用。
使用RecyclerView离不开2个类的使用:ViewHolder和Adapter,ViewHolder用于容纳用于显示的View视图,由Adapter将数据设置到要显示的视图中,再让RecyclerView设置该适配器来达到显示效果。
使用RecyclerView需要支持库,在Eclipse中引入v7包添加引用即可,在AndroidStudio中,单击File → Project Structure....菜单项切换至项目结构窗口,选择左边的app模块,然后单击 Dependencies选项页。单击+按钮弹出依赖库添加窗口。 找到并选择recyclerview-v7支持库,单击OK按钮完成依赖库添加,如图
在布局文件中定义RecyclerView(Activity_main.xml):
<android.support.v7.widget.RecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/my_recycle_view"
android:layout_width="match_parent"
android:layout_height="match_parent"> </android.support.v7.widget.RecyclerView>
代码编写:(MainActivity.java)
public class MainActivity extends AppCompatActivity {
private RecyclerView my_recycler_view;
private MyAdapter mMyAdapter; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
my_recycler_view = (RecyclerView) findViewById(R.id.my_recycle_view);
//RecyclerView视图创建完毕后就转交给LayoutManager对象
my_recycler_view.setLayoutManager(new LinearLayoutManager(getBaseContext()));
mMyAdapter = new MyAdapter(getListRes());//创建适配器对象
my_recycler_view.setAdapter(mMyAdapter);//设置适配器
} public List<String> getListRes() {
List<String> list = new ArrayList<>();
for (int i = 0; i < 40; i++) {
list.add("hello_world--->" + i);
}
return list;
} //创建ViewHolder类用于显示视图
private class MyHolder extends RecyclerView.ViewHolder { public TextView tv_title; public MyHolder(View itemView) {
super(itemView);
tv_title = (TextView) itemView;
}
} //创建Adapter
private class MyAdapter extends RecyclerView.Adapter<MyHolder> { private List<String> mList; public MyAdapter(List<String> list) {
mList = list;//获取数据资源
} @Override
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(getBaseContext()).inflate(android.R.layout
.simple_list_item_1,
parent, false);
return new MyHolder(view);
} @Override
public void onBindViewHolder(MyHolder holder, int position) {
holder.tv_title.setText(mList.get(position) + "");//给holder里的view设置内容
} @Override
public int getItemCount() {
return mList.size();//返回资源数据的长度
}
}
} 上面的代码中分别创建了继承Recycler.ViewHolder和RecyclerAdapter<VH>的2个类MyHolder和MyAdapter,MyAdapter的onCreateViewHolder()设置view,传给MyHolder,在MyHolder的构造函数中获取控件对象,然后在onBindViewHolder()方法中为MyHolder的view设值。最后让RecyclerView设置该适配器即可。 现在进一步增加布局的复杂度,创建一个新的布局文件(list_item_layout)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"> <ImageView
android:id="@+id/iv_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/> <TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/iv_icon"/> <TextView
android:id="@+id/tv_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/tv_title"
android:layout_toRightOf="@id/iv_icon"/>
</RelativeLayout>
添加获取数据的代码:
public List<String> getListContent(){
List<String> list = new ArrayList<>();
for (int i = 0; i < 40; i++) {
list.add("android--->" + i);
}
return list;
} 修改MyAdapter的内容
private class MyAdapter extends RecyclerView.Adapter<MyHolder> { private List<String> mListTitle, mListContent; public MyAdapter(List<String> listTitle, List<String> listContent) {
mListTitle = listTitle;//获取数据资源
mListContent = listContent;
} @Override
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(getBaseContext()).inflate(R.layout.list_item_layout,
parent, false);
return new MyHolder(view);
} @Override
public void onBindViewHolder(MyHolder holder, int position) {
holder.tv_title.setText(mListTitle.get(position) + "");//给holder里的view设置内容
holder.tv_content.setText(mListContent.get(position) + "");
holder.iv_icon.setImageResource(R.mipmap.ic_launcher);
} @Override
public int getItemCount() {
return mListTitle.size();//返回资源数据的长度
}
}
修改MyHolder的内容:
public TextView tv_title;
public TextView tv_content;
public ImageView iv_icon; public MyHolder(View itemView) {
super(itemView);
tv_title = (TextView) itemView.findViewById(R.id.tv_title);
tv_content = (TextView) itemView.findViewById(R.id.tv_content);
iv_icon = (ImageView) itemView.findViewById(R.id.iv_icon);
}
再将创建适配器对象代码改为
mMyAdapter = new MyAdapter(getListRes(),getListContent());//创建适配器对象 就实现了简单的自定义布局展示的效果:
Android之RecyclerView入门的更多相关文章
- android 开发从入门到精通
Android-Tips This is an awesome list of tips for android. If you are a beginner, this list will be t ...
- 学Android开发,入门语言java知识点
学Android开发,入门语言java知识点 Android是一种以Linux为基础的开源码操作系统,主要使用于便携设备,而linux是用c语言和少量汇编语言写成的,如果你想研究Android,就去学 ...
- [Android]使用RecyclerView替代ListView(三)
以下内容为原创,转载请注明: 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4268097.html 这次来使用RecyclerView实现Pinn ...
- [Android]使用RecyclerView替代ListView(二)
以下内容为原创,转载请注明: 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4242541.html 以前写过一篇“[Android]使用Adapte ...
- [Android]使用RecyclerView替代ListView(一)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4232560.html RecyclerView是一个比List ...
- Android Studio单元测试入门
Android Studio单元测试入门 通常在开发Android app的时候经常会写一些小函数并验证它是否运行正确,通常做法我们是把这个函数放到某个界面(Activity上)执行一下,运行整个工程 ...
- 下面就介绍下Android NDK的入门学习过程(转)
为何要用到NDK? 概括来说主要分为以下几种情况: 1. 代码的保护,由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大. 2. 在NDK中调用第三方C/C++库,因为大部分的开源库 ...
- Android渗透测试Android渗透测试入门教程大学霸
Android渗透测试Android渗透测试入门教程大学霸 第1章 Android渗透测试 Android是一种基于Linux的自由及开放源代码的操作系统,主要用于移动设备,如智能手机.平板等.目前 ...
- 一看就懂的Android APP开发入门教程
一看就懂的Android APP开发入门教程 作者: 字体:[增加 减小] 类型:转载 这篇文章主要介绍了Android APP开发入门教程,从SDK下载.开发环境搭建.代码编写.APP打包等步骤 ...
随机推荐
- Spring自动化装配bean
1. 场景 用CD(Compact disc)和CD播放器(CDPlayer)阐述DI(依赖注入). 如果不将CD插入(注入)到CDPlayer中,那么CDPlayer其实没有太大的用处,所以,可以这 ...
- maven 创建后报错
<dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId& ...
- dede系统自定义变量删除方法
之前添加了个联系电话的系统变量,忘记写描述,结果就显示个冒号,很难看.这样的就要删除了重来,那么织梦怎么删除添加的变量呢?其实很简单.两种方法: 第一种:执行SQL语句.在织梦后台执行-系统-SQL命 ...
- Spring+SpringMVC+MyBatis深入学习及搭建(十)——MyBatis逆向工程
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6973266.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(九)--My ...
- python之matplotlib绘图基础
Python之matplotlib基础 matplotlib是Python优秀的数据可视化第三方库 matplotlib库的效果可参考 http://matplotlib.org/gallery.ht ...
- linq中给字段添加别名
linq 是我们在查询中经常回用到的一种形式,比如我们创建一个类,然后List<添加> 并绑定到表格中 public class Modeltest { string id; public ...
- .Net Core 图片文件上传下载
当下.Net Core项目可是如雨后春笋一般发展起来,作为.Net大军中的一员,我热忱地拥抱了.Net Core并且积极使用其进行业务的开发,我们先介绍下.Net Core项目下实现文件上传下载接口. ...
- iOS开发之常用资讯类App的分类展示与编辑的完整案例实现(Swift版)
上篇博客我们聊了<资讯类App常用分类控件的封装与实现(CollectionView+Swift3.0)>,今天的这篇博客就在上篇博客的基础上做些东西.做一个完整的资讯类App中的分类展示 ...
- MYSQL导入数据报错|MYSQL导入超大文件报错|MYSQL导入大数据库报错:2006 - MySQL server has gone away
导SQL数据库结构+数据时,如果数据是批量插入的话会报错:2006 - MySQL server has gone away. 解决办法:找到你的mysql目录下的my.ini配置文件(如果安装目录没 ...
- 将angular-ui-bootstrap的弹出框定义成一个服务的实践
定义一个弹出框的服务:alert_boxdefiine(["app"],function(mainapp){ mainapp.controller('ModalInstanceCt ...