【Android开发】RecyclerView的基本使用
2017-01-17 23:36
417 查看
主要思路
【服务器维护中,暂时无法上传图片】一个RecyclerView中包含很多个ViewHolder,所有的ViewHolder共由一个Adapter控制,而每个ViewHolder都维护着自己所应显示的内容。
由于ViewHolder与Adapter都不需要在ViewHolder以外的地方使用,故可以定义匿名内部类最方便。
每个ViewHolder显示的可以是预设的布局,也可以是定制列表项。
RecyclerView会把不在屏幕上的ViewHolder回收重新利用以达到节约资源的效果。
具体代码
需要import的主要的包:android.support.v7.widget.RecyclerView(需要设置支持库)
此处以RecyclerView存在于一个Fragment内为例
XXListFragment.java
public class XXListFragment extends Fragment { private RecyclerView mXXRecyclerView; private XXAdapter mAdapter; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_xx_list, container, false); //将私有成员mXXRecyclerView与布局中的RecyclerView绑定 mXXRecyclerView = (RecyclerView) v.findViewById(R.id.recycler_view_xx_list); //设置布局Manager mMemoRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); //除了初始化,还有其他时刻可能会更新内容 //比如说由列表启动列表项的activity,再返回列表的时候 //此时列表activity并非重新生成,而是从内存中由挂起状态恢复 //这时不会进入onCreateView(...)这个方法,但仍需要更新内容 updateUI(); return v; } private void updateUI() { //初始化单例 XXLab xxLab = XXLab.get(getActivity()); List<XX> xxs = xxLab.getMemos(); //初始化Adapter mAdapter = new XXAdapter(xxs); //为RecyclerView设置Adapter mXXRecyclerView.setAdapter(mAdapter); } //ViewHolder的匿名内部类 private class XXHolder extends RecyclerView.ViewHolder { //存储该ViewHolder所显示内容的对象 private XX mXX; //示例组件 //此处以每一项只显示标题的RecyclerView为例 private TextView mTitle; public XXHolder(View itemView) { super(itemView); //将组件与布局中的相应组件绑定 mTitle = (TextView) itemView.findViewById(R.id.xx_list_item_title); } public void bindXX(XX xx) { mXX = xx; //将组件实际显示的内容修改为传入的对象的相应内容 mTitle.setText(mXX.getTitle()); } } private class XXAdapter extends RecyclerView.Adapter<XXHolder> { private List<XX> mXXs; public XXAdapter(List<XX> xxs) { mXXs = xxs; } @Override public XXHolder onCreateViewHolder(ViewGroup parent, int viewType) { LayoutInflater layoutInflater = LayoutInflater.from(getActivity()); //设置View //此处使用的布局是定制的列表项布局 View view = layoutInflater.inflate(R.layout.list_item_xx, parent, false); //创建新的ViewHolder return new XXHolder(view); } @Override public void onBindViewHolder(XXHolder holder, int position) { //该对象为储存要显示的内容的对象 XX xx = mXXs.get(position); //将这个对象传给ViewHolder来绑定 //RecyclerView是会回收不显示的ViewHolder来显示新内容 //以达到节省资源的目的的组件 //所以此处传入同一个ViewHolder的可能是不同的对象 holder.bindXX(xx); } //系统会用到的方法 @Override public int getItemCount() { return mXXs.size(); } } }
list_item_xx.xml(/res/layout/…)(定制列表项的内容)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/xx_list_item_title" ... /> </RelativeLayout>
fragment_xx_list.xml(/res/layout/…)
<?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" > <android.support.v7.widget.RecyclerView android:id="@+id/recycler_view_xx_list" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
XX.java(用于储存列表中一项的数据的类)
public class XX { private String mTitle; public void setTitle(String title) { mTitle = title; } public String getTitle() { return mTitle; } }
XXLab.java(储存列表内容的单例)
public class MemoLab { //只允许存在一个单例 private static XXLab sXXLab; //单例维护的内容列表 private List<XX> mXXs; private XXLab(Context context) { ... } public static XXLab get(Context context) { //有且仅有一个单例对象 if (sXXLab == null) { sXXLab = new XXLab(context); } return sXXLab; } //返回单例所维护的内容列表 public List<XX> getXXs() { return mXXs; } }
相关文章推荐
- Android开发——RecyclerView特性以及基本使用方法(一)
- Android开发——RecyclerView特性以及基本使用方法(二)
- Android开发之RecyclerView的基本使用(实现常用的4种效果)
- Android开发——RecyclerView特性以及基本使用方法(二)
- Android开发——RecyclerView特性以及基本使用方法(一)
- Android App开发中RecyclerView控件的基本使用教程
- Android开发之应用管理(RecyclerView的不同position使用不同的View)
- Android开发--RecyclerView使用,看AndroidL新特性,android5.0新特性
- Android控件之RecyclerView的基本使用
- Android RecyclerView基本使用
- android开发游记:ItemTouchHelper 使用RecyclerView打造可拖拽的GridView
- RecyclerView的使用(Android开发必备,替换掉ListView)
- Android RecyclerView 的基本使用
- Android开发之RecyclerView的使用
- Android开发之RecyclerView的使用全解
- Android开发之RecyclerView的使用全解
- Android应用开发中RecyclerView组件使用入门教程
- Android RecyclerView 的基本使用--瀑布流
- Android开发学习之路-RecyclerView使用初探
- Android开发--RecyclerView使用