RecyclerView0基于使用

RecyclerView0基于使用

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

(转载请注明出处:http://www.kennethyo.me/post/android/recyclerviewchu-ji-shi-yong)

RecyclerView是Android在v7包中包括了一个新的widget。RecyclerView是一个ListView进阶版,但不继承与AdapterView。相比ListViewRecyclerView更加灵活和先进。

1。导入RecyclerView

首先要保证SDK ToolsAndroid Support Repository为最新版。

例如以下图:

RecyclerView0基于使用

RecyclerView0基于使用
其次,在你的demoproject里选中Project Structurebutton,而且选择app —— Dependencies —— “+” —— Library dependency,去加入支持包,例如以下图:

RecyclerView0基于使用

最后。在新的对话框里选中com.android.support:recyclerview-v7:21.0.0,点击OK。

例如以下图:

RecyclerView0基于使用
这里就顺利的导入了RecyclerView

2,使用RecyclerView

在布局文件里使用RecyclerView。跟其它自己定义控件一样,例如以下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</RelativeLayout>

由于日常开发中,我们大多数都是依照UI去布局每一个item,所以这里我没与图省事用Android自带的布局。例如以下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


        <TextView
            android:id="@+id/textView"
            android:layout_width="match_parent"
            android:layout_height="48dp"
            android:textStyle="bold"
            android:background="@android:color/holo_blue_light"
            android:textColor="@android:color/holo_red_light"
            android:gravity="center_vertical"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:text="New Text" />

</LinearLayout>

以下就是代码了:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);

        //LinearLayoutManager能够自己定义实现不同的动画效果和布局效果
        //这里设置为LinearLayoutManager.HORIZONTAL变成为了一个能够横向滑动的ListView,赞不赞?
        LinearLayoutManager layoutManager = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setHasFixedSize(false);//adapter的改变不会改变RecyclerView的大小

        String[] strings = new String[50];
        for (int i = 0;i<50;i++){
            strings[i] = String.valueOf(i);
        }

        StringRecyclerAdapter adapter = new StringRecyclerAdapter(strings);

        recyclerView.setAdapter(adapter);

    }

能够明白看到的是,RecyclerView通过(RecyclerView) findViewById(R.id.recyclerView)初始化之后,不仅要像ListView一样要放入Adapter进行数据和布局的适配,并且还要额外加入一个LinearLayoutManager

这个Manager就是我们的布局管理工具类,这里不仅能够用常规的竖直方向布局。还有横向的滑动的布局,以后再也不会由于没有横向滑动的ListView去头疼自己定义了。

通过自己定义LinearLayoutManager也能够实现不同的动画效果,和移动效果。
RecyclerView的Adapter和ListView的Adapter也是不同的。RecyclerView的Adapter要继承RecyclerView.Adapter<VH extends ViewHolder>,而且ViewHolder要继承与ViewHolder.RecyclerView。详细代码例如以下:

public class StringRecyclerAdapter extends RecyclerView.Adapter<StringRecyclerAdapter.ViewHolder> { private String[] strings; public StringRecyclerAdapter(String[] strings) { this.strings = strings; } @Override public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View view = View.inflate(viewGroup.getContext(), R.layout.adapter_string_recylcer, null); //这里发现不给item布局加入LayoutParams,会直接默觉得WRAP_CONTENT。WRAP_CONTENT布局。

view.setPadding(20, 0,0, 0); view.setFocusable(true); RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); lp.leftMargin = 10; lp.rightMargin = 5; lp.topMargin = 20; lp.bottomMargin = 15; view.setLayoutParams(lp); ViewHolder viewHolder = new ViewHolder(view); return viewHolder; } @Override public void onBindViewHolder(ViewHolder viewHolder, int i) { viewHolder.textView.setText(StringRecyclerAdapter.class.getSimpleName() + getValueAt(i)); } public String getValueAt(int i) { return strings[i]; } @Override public int getItemCount() { return this.strings == null ? 0 : strings.length; } public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { public TextView textView; public ViewHolder(View itemView) { super(itemView); textView = (TextView) itemView.findViewById(R.id.textView); //由于RecyclerView没用setOnItemClickListener,所以在这里实现了点击事件 //况且,如今有越来越多的设计,会在每一个item点击不同位置,有不同的响应 textView.setOnClickListener(this); } @Override public void onClick(View v) { Toast.makeText(v.getContext(),((TextView)v).getText(),Toast.LENGTH_SHORT).show(); } } }

onCreateViewHolder方法中,我们须要把载入布局和ViewHolder绑定起来。这里有个问题。不知道是Android的bug。还是有益这么设计的,须要我们主动写代码给item设置LayoutParams
onBindViewHolder中负责数据绑定。


这里有一个问题,RecyclerView没有setOnItemClickListener方法,所以我在里面对TextView加入了点击事件,如今有越来越多的设计,会在每一个item点击不同位置。有不同的响应。

RecyclerView0基于使用

Demo链接

版权声明:本文博客原创文章。博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/117428.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • c++ accept_怎么把汇编语言转化为c语言

    c++ accept_怎么把汇编语言转化为c语言AcceptEx函数的定义如下:BOOLAcceptEx(SOCKETsListenSocket,SOCKETsAcceptSocket,PVOIDlpOutputBuffer,DWORDdwReceiveDataLength,DWORDdwLocalAddressLength,DWORDdwRemoteAddressLength,LPDWORDlpdwBytesReceived,…

  • 波束形成

    波束形成1.问题描述:数字波束形成器是全数字化超声成像的基础,也是高性能彩超的保证。数字波束形成包括发射和接收两个部分。数字是接收波束形成的关键技术,它通过使用顺序储存器FIFO或随机存取存储器双端口RAM替代模拟式波束形成器中的LC延时线来实现波束聚焦,即以数字延时补偿替代模拟延时的补偿。数字延时不仅能实现精确延时补偿,实现所谓的逐点跟踪式动态聚焦,还能方便实现动态孔径、动态变迹控制,克服模拟式延时补偿存在的诸多固有缺点,通道数增加不受限制,是图像品质得以全面提高。2.部分程序:close..

  • 简单教你写xsync和xcall的脚本

    简单教你写xsync和xcall的脚本xsync配置xsync脚本基于rsync工具,rsync远程同步工具,主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点,它只是拷贝文件不同的部分,因而减少了网络负担。rsync-rvl$pdir/$fname$user@hadoop$host:$pdir常用参数:-r,–recursive对子目录以递归模式处理-R,–relative使用相对路径信…

  • GitHub开源的10个超棒后台管理面板

    GitHub开源的10个超棒后台管理面板项目开发中后台管理平台必不可少,但是从零搭建一套多样化后台管理并不容易,目前有许多开源、免费、样式丰富的后台管控面板,深夜学习简书上一位大神的博文,共总结10项优秀后台管理控制面板(9个GitHub项目,1个在线UI框架)。

  • 什么是SQL游标?[通俗易懂]

    什么是SQL游标?[通俗易懂]1.1游标的概念游标(Cursor)它使用户可逐行访问由SQLServer返回的结果集。使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式。用SQL语言从数据库中检索数据

  • JavaScript高级程序设计(第3版)中文 高清 完整

    JavaScript高级程序设计(第3版)中文 高清 完整下载地址:英文版下载地址:中文版

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号