RecyclerView的基础用法

为了让RecyclerView可以在所有的Android版本中都能使用,Android开发团队将RecyclerView定义在support.v7包当中。在使用该控件时需要打开当前Modile的build.gradle文件,然后在dependencies节点中添加依赖库的代码。具体代码如下:

compile'com.android.support:recyclerview-v7:插入版本号'

添加完成以后需要单击右上角的Sync Now进行同步。同步完成后可以在布局文件中添加RecyclerView控件,语法格式如下:

<android.support.v7.widget.RecyclerView

    android:id="@+id/my_recycler_view"

    android:scrollbars="vertical"

    android:layout_width="match_parent"

    android:layout_height="match_parent"/>

控制RecyclerView需要一些常用的方法,具体方法如下:

◆ setLayoutManager:设置列表项的布局管理器,LinearLayoutManager为线性布局管理器、GridLayoutManager为网格布局管理器、StaggeredGridLayoutManager为瀑布流网格布局管理器。

◆ setItemAnimator:设置列表项增加或者是删除时的动画,可以使用关键字new创建 DefaultItemAnimator()对象实现系统默认的动画效果。

◆ addItemDecoration:添加列表项分割线。

◆ addOnItemTouchListener:添加列表项的触摸监听器。

◆ removeOnItemTouchListener:移除列表项的触摸监听器。

◆ setAdapter:设置列表项的适配器,使用RecyclerView.Adapter。

RecyclerView.Adapter是为RecyclerView所单独设计的适配器类,RecyclerView.Adapter的相关方法如下:

◆ getItemCount:获取列表项的数目。

◆ onBindViewHolder:绑定列表项中所显示的数据。

◆ onCreateViewHolder:在该方法中可以加载列表item(子项)中的布局文件。

下面通过一个具体的实例演示RecyclerView垂直列表的具体应用。


实例 模拟QQ消息列表


在Android Studio中创建Module,名称为“QQMessageList”,具体步骤如下:

(1)打开build.gradle(Module: QQMessageList)文件,然后在该文件中的dependencies节点中添加依赖库的代码。

(2)修改新建Module的res/layout目录下的布局文件activity_main.xml,将默认添加的布局管理器修改为相对布局管理器并将TextView组件删除,然后添加1个RecyclerView组件用于显示消息列表。具体代码如下:

01   <?xml version="1.0"encoding="utf-8"?>
02   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
03       xmlns:app="http://schemas.android.com/apk/res-auto"
04       xmlns:tools="http://schemas.android.com/tools"
05       android:layout_width="match_parent"
06       android:layout_height="match_parent"
07       tools:context="com.mingrisoft.MainActivity">
08       <!--列表控件-->
09       <android.support.v7.widget.RecyclerView
10           android:id="@+id/recyclerview"
11           android:background="#EEEEEE"
12           android:layout_width="match_parent"
13           android:layout_height="wrap_content"
14           android:orientation="vertical"
15           />
16   </RelativeLayout>


(3)在res/layout目录中创建1个名称为layout_item.xml的布局文件,将默认添加的布局管理器修改为相对布局管理器,首先添加1个ImageView组件用于显示头像的图标,然后添加1个垂直线性布局管理器,在该布局管理器中添加2个TextView组件分别用于显示名称与文字消息。具体代码如下:

01   <?xml version="1.0"encoding="utf-8"?>
02   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
03       android:layout_width="match_parent"
04       android:layout_height="50dp"
05       android:layout_marginBottom="1dp"
06       android:background="@android:color/white"
07       android:gravity="center_vertical">
08       <!--图标-->
09       <ImageView
10           android:id="@+id/img"
11           android:layout_width="50dp"
12           android:layout_height="50dp"
13           android:layout_alignParentLeft="true"
14           android:layout_alignParentStart="true"
15           android:layout_alignParentTop="true" />
16       <LinearLayout
17           android:layout_width="wrap_content"
18           android:layout_height="match_parent"
19           android:layout_toRightOf="@+id/img"
20           android:gravity="center_vertical"
21           android:orientation="vertical">
22           <!--名称-->
23           <TextView
24               android:id="@+id/name"
25               android:layout_width="match_parent"
26               android:layout_height="wrap_content"
27               android:layout_marginLeft="20dp"
28               android:textColor="#000000"
29               android:textSize="15dp" />
30           <!--消息-->
31           <TextView
32               android:id="@+id/info"
33               android:layout_width="match_parent"
34               android:layout_height="wrap_content"
35               android:layout_marginLeft="20dp"
36               android:layout_marginRight="15dp"
37               android:singleLine="true"
38               android:textSize="10dp" />
39       </LinearLayout>
40   </RelativeLayout>

(4)在res/values目录中的strings.xml字符串资源文件内添加名字与文字消息,用于显示在列表当中。

(5)在com.mingrisoft包中创建1个名称为Adapter的Java类,首先在该类中创建1个名称为MyViewHolder的内部类并让该类继承自RecyclerView.ViewHolder,在该内部类中获取列表中用于显示名称、头像图标与文字信息的组件。然后让Adapter类继承自RecyclerView.Adapter<Adapter.MyViewHolder>并且实现相对应的方法。具体代码如下:

01   public class Adapterextends RecyclerView.Adapter<Adapter.MyViewHolder>{
02       @Override
03       public MyViewHolderonCreateViewHolder(ViewGroup parent, int viewType){
04           return null;
05       }
06       @Override
07       public void onBindViewHolder(MyViewHolderholder, int position) {
08       }
09       @Override
10       public int getItemCount() {
11           return 0;
12       }
13       class MyViewHolderextends RecyclerView.ViewHolder {
14           public TextViewname, info;              //编号文字
15           public ImageView img;                     //图标
16    
17           //获取相关控件
18           public MyViewHolder(View itemView){
19               super(itemView);
20               name= (TextView) itemView.findViewById(R.id.name);
21               info= (TextView) itemView.findViewById(R.id.info);
22               img =(ImageView) itemView.findViewById(R.id.img);
23           }
24       }
25   }


(6)创建3个int类型的数组分别用于保存头像的图标资源、名字、文字信息,然后创建3个ArrayList集合分别用于保存数组中的资源文件,最后创建1个Adapter构造方法,在该方法中设置菜单行数与行内图标、名称与文字信息具体代码如下:

01   //图标数组
02   private int[]icons = {
03           R.mipmap.icon_1,R.mipmap.icon_2, R.mipmap.icon_3,
04           R.mipmap.icon_4,R.mipmap.icon_5, R.mipmap.icon_6,
05           R.mipmap.icon_7,R.mipmap.icon_8, R.mipmap.icon_9,
06           R.mipmap.icon_10,R.mipmap.icon_11
07   };
08   //名字数组,引用资源文件中的文字
09   private int[]names = {
10           R.string.name1,R.string.name2, R.string.name3,
11           R.string.name4,R.string.name5, R.string.name6,
12           R.string.name7,R.string.name8, R.string.name9,
13           R.string.name10,R.string.name11
14   };
15   //信息数组
16   private int[]infos = {
17           R.string.info1,R.string.info2, R.string.info3,
18           R.string.info4,R.string.info5, R.string.info6,
19           R.string.info7,R.string.info8, R.string.info9,
20           R.string.info10,R.string.info11
21   };
22   private ContextlContext;   //上下文
23   private List<Integer>listIcon = new ArrayList<Integer>();   //图标集合
24   private List<Integer>listName = new ArrayList<Integer>();   //名称集合
25   private List<Integer>listInfo = new ArrayList<Integer>();   //信息集合
26   public Adapter(Contextcontext) {
27       lContext =context;
28       //设置菜单行数与行内图标、名称、信息
29       for (inti = 0; i < 11; i++) {
30           listIcon.add(icons[i]);
31           listName.add(names[i]);
32           listInfo.add(infos[i]);
33       }
34   }


(7)重写MyViewHolder onCreateViewHolder()方法,在该方法中实现获取列表中,每行item的布局文件。修改后代码如下:

01   @Override
02   public MyViewHolderonCreateViewHolder(ViewGroup arg0, int arg1){
03       //获取列表中,每行的布局文件
04       Viewview = LayoutInflater.from(lContext).inflate(R.layout.layout_item, arg0, false);
05       MyViewHolder holder = new MyViewHolder(view);           //
06       return holder;
07   }


(8)重写onBindViewHolder()方法,在该方法中设置列表菜单中item(子项)所显示的内容。修改后代码如下:

01   @Override
02   public void onBindViewHolder(final MyViewHolder holder, int position) {
03       //设置图标
04       holder.img.setBackgroundResource(listIcon.get(position));
05       //设置名称
06       holder.name.setText(listName.get(position));
07       //设置信息
08       holder.info.setText(listInfo.get(position));
09   }


(9)重写getItemCount()方法,在该方法中实现返回数据集中的项目总数。修改后代码如下:

01   @Override
02   public int getItemCount(){
03       return listIcon.size();
04   }


(10)打开主活动MainActivity.java文件,定义所需要的全局变量,在onCreate()方法中首先获取RecyclerView组件,然后为其设置列表布局管理器,最后为其设置适配器。具体代码如下:

01   public class MainActivityextends AppCompatActivity {
02       private RecyclerViewlRecyclerView;     //列表控件
03       private Adapter lAdapter;                //适配器
04       @Override
05       protected void onCreate(Bundle savedInstanceState){
06           super.onCreate(savedInstanceState);
07           setContentView(R.layout.activity_main);
08           //获取列表控件
09           lRecyclerView = (RecyclerView)findViewById(R.id.recyclerview);
10           //设置列表布局管理
11           lRecyclerView.setLayoutManager(new LinearLayoutManager(this));
12           //设置适配器
13           lRecyclerView.setAdapter(lAdapter = new Adapter(this));
14       }
15   }

(10)在工具栏中,找到下拉列表框,然后单击要运行的应用(这里为QQMessageList),再单击右侧的运行按钮,运行效果如图27.27所示。



图27.27  模拟QQ消息列表

                  

感谢读者朋友对明日科技的支持,如果您对图书中的讲解及光盘源码有任何问题,可以直接登录http://www.mingrisoft.com上的社区进行发贴,把您的问题详细的说明一下,我们的技术人员会在那里给您回复!

本文来自明日科技即将出版的《Android开发详解》,转载请注明出处!!!

 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值