RecyclerView实现倒序列表

Stella981
• 阅读 1388

RecyclerView实现倒序列表

标签(空格分隔): android RecyclerView 倒序


##1、写在前面 实现一个聊天界面,就是类似QQ那种,这里是讲一下倒序排列,不实现QQ的各种高级功能

##2、ListView 反转数据 只要把数据倒序加入到adapter的数据集中,就可以实现倒序效果

    /**
     * 回底部
     */
    public void goBottom() {
        handler.post(new Runnable() {
            @Override
            public void run() {
                if (mListView != null)
                    mListView.setSelection(mListView.getBottom());
            }
        });
    }  

这个方案有一下几个问题

  1. 显示最后一条需要每次都移动到相应位置
  2. 加载更多需要使用下拉刷新的样式实现(如果样式差不多,这里不是问题)

##3、RecyclerView

###方案一、反转数据 同listview的实现方式,将数据倒序加入,除了具有listview方式的问题

###方案二、反转列表 RecyclerView的布局是有LayoutManager控制的,LinearLayoutManager就支持了倒序的功能

  1. setStackFromEnd(true)

  2. setReverseLayout(true)

  3. list.addFirst(item) 在数据上,可以考虑使用上面3的方法,直接添加数据到列表的头部,或者重写adapter的getItem方法,改为get(size-1-position)

    RecyclerView rv = (RecyclerView) findViewById(R.id.rv);
    
    LinearLayoutManager layout = new LinearLayoutManager(this);
    layout.setStackFromEnd(true);//列表再底部开始展示,反转后由上面开始展示
    layout.setReverseLayout(true);//列表翻转
    rv.setLayoutManager(layout);
    
    final SimpleRvAdapter adapter = new SimpleRvAdapter(this);
    rv.setAdapter(adapter);
    

    fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { adapter.add(String.valueOf(adapter.getItemCount() + 1)); adapter.notifyDataSetChanged(); } }); public class SimpleRvAdapter extends RecyclerView.Adapter<SimpleRvAdapter.VH> { private Context mContext; private LinkedList list = new LinkedList<>(); public SimpleRvAdapter(Context context) { mContext = context; } public void add(String item) { list.addFirst(item); } @Override public VH onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(mContext).inflate(R.layout.item, parent, false); return new VH(view); } @Override public void onBindViewHolder(VH holder, final int position) { holder.textView.setText(list.get(position)); holder.textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(mContext, "position:" + position, Toast.LENGTH_LONG).show(); } }); } @Override public int getItemCount() { return list.size(); } public static class VH extends RecyclerView.ViewHolder { private TextView textView; public VH(View itemView) { super(itemView); textView = (TextView) itemView.findViewById(R.id.textView); } } }

这样就实现了我们需要的功能,这时候,列表使反转的,bottom在上面,其他的功能正常使用,比如,加载更多自动会跑到上面去 如果在需求上有出入,可以根据需求自定义LayoutManager,这也就是RecyclerView的强大之处,,完全由你自定义的布局

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
java反射练习 对集合中元素 按照方法进行排序
/\\\对集合中元素按照指定方法进行排序\\@paramlist需要排序的集合\@paramproperty时间对象在集合对象中属性名称\@parammethod排序字段get方法\@paramreverse是否倒序\/publicstatic<Tvoidsor
Wesley13 Wesley13
3年前
1、将12345转换为54321. 2、将12345转换为‘12345’,不要使用str. 3.将‘12345’转换为12345,不要使用int。
1、将12345转为54321(思路:将一个整数,转成倒序的形式,这里采用算数运算符,同时得到商和余数,我们学习了divmod,恰好可以得到商和余数)nint(input('请输入一个整数:'))ret0whilen:利用divmod函数得到商和余数,并且在python中,可以对等赋值n,lastdivmod(n,
Wesley13 Wesley13
3年前
mysql特殊使用
1、按照job和薪水倒序排序:selectename,job,salfromemporderbyjobdesc,saldesc;2、substr()截取子串该函数接收3个参数:substr(被截取字段名称,起始下标,截取长度),起始下标从1开始。查询并显示所员工姓名的第二个字母:sele
Wesley13 Wesley13
3年前
JS字符串反转
最开始的思路是,先把字符串分割,然后倒序拼接成一个新的字符串。于是有了方法一:varname"MycityisWH";varnameArrname.split('');varresult;varresultStr'';for(vari0,l
Wesley13 Wesley13
3年前
3.spring boot Controller获取请求参数的值
1.获取连接中的参数,使用倒的关键词@PathVariable@RestControllerpublicclassHelloController{@RequestMapping(value"/hello/{id}",methodRequestMethod.GET)publicStringindex(@Path
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
Java实现月份递减
问题:从当前月份开始,往前3年的所有月份返回map类型,key是String,value是Date,map倒序排列publicstaticMap<String,DategetDateMap(){Map<String,DatemapnewLinkedHashMap<();Calen
Stella981 Stella981
3年前
Maven的使用(依赖冲突)
1.1Maven坐标坐标:每一个jar包或maven项目在网络上都有一个独一无二的身份证坐标(GAV)1.groupId公司或组织域名的倒序(仓库:包名)2.artifactId项目名或模块名(仓库:项目名)3.version版本号(仓库:版本号)坐标和本地仓库有关系么?