RecyclerView实现倒序列表

RecyclerView实现倒序列表

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


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

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

1 /** 2 * 回底部 3 */ 4 public void goBottom() { 5 handler.post(new Runnable() { 6 @Override 7 public void run() { 8 if (mListView != null) 9 mListView.setSelection(mListView.getBottom()); 10 } 11 }); 12 }

这个方案有一下几个问题

  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)

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

    fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { adapter.add(String.valueOf(adapter.getItemCount() + 1)); adapter.notifyDataSetChanged();

    1 } 2});

    public class SimpleRvAdapter extends RecyclerView.Adapter<SimpleRvAdapter.VH> { private Context mContext; private LinkedList<String> list = new LinkedList<>();

    1public SimpleRvAdapter(Context context) { 2 mContext = context; 3} 4 5public void add(String item) { 6 list.addFirst(item); 7} 8 9@Override 10public VH onCreateViewHolder(ViewGroup parent, int viewType) { 11 View view = LayoutInflater.from(mContext).inflate(R.layout.item, parent, false); 12 return new VH(view); 13} 14 15@Override 16public void onBindViewHolder(VH holder, final int position) { 17 holder.textView.setText(list.get(position)); 18 holder.textView.setOnClickListener(new View.OnClickListener() { 19 @Override 20 public void onClick(View v) { 21 Toast.makeText(mContext, "position:" + position, Toast.LENGTH_LONG).show(); 22 } 23 }); 24} 25 26@Override 27public int getItemCount() { 28 return list.size(); 29} 30 31public static class VH extends RecyclerView.ViewHolder { 32 private TextView textView; 33 34 public VH(View itemView) { 35 super(itemView); 36 textView = (TextView) itemView.findViewById(R.id.textView); 37 } 38}

    }

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

点赞
收藏

评论区

加载中...

相关推荐

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

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java反射练习 对集合中元素 按照方法进行排序

/\\\对集合中元素按照指定方法进行排序\\@paramlist需要排序的集合\@paramproperty时间对象在集合对象中属性名称\@parammethod排序字段get方法\@paramreverse是否倒序\/publicstatic<Tvoidsor

1、将12345转换为54321. 2、将12345转换为‘12345’,不要使用str. 3.将‘12345’转换为12345,不要使用int。

1、将12345转为54321(思路:将一个整数,转成倒序的形式,这里采用算数运算符,同时得到商和余数,我们学习了divmod,恰好可以得到商和余数)nint(input('请输入一个整数:'))ret0whilen:利用divmod函数得到商和余数,并且在python中,可以对等赋值n,lastdivmod(n,

mysql特殊使用

1、按照job和薪水倒序排序:selectename,job,salfromemporderbyjobdesc,saldesc;2、substr()截取子串该函数接收3个参数:substr(被截取字段名称,起始下标,截取长度),起始下标从1开始。查询并显示所员工姓名的第二个字母:sele