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 }
这个方案有一下几个问题
- 显示最后一条需要每次都移动到相应位置
- 加载更多需要使用下拉刷新的样式实现(如果样式差不多,这里不是问题)
##3、RecyclerView
###方案一、反转数据 同listview的实现方式,将数据倒序加入,除了具有listview方式的问题
###方案二、反转列表 RecyclerView的布局是有LayoutManager控制的,LinearLayoutManager就支持了倒序的功能
-
setStackFromEnd(true) -
setReverseLayout(true) -
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的强大之处,,完全由你自定义的布局