@zouzhenglu
2017-02-13T13:56:56.000000Z
字数 2164
阅读 94
android RecyclerView 倒序
实现一个聊天界面,就是类似QQ那种,这里是讲一下倒序排列,不实现QQ的各种高级功能
只要把数据倒序加入到adapter的数据集中,就可以实现倒序效果
/*** 回底部*/public void goBottom() {handler.post(new Runnable() {@Overridepublic void run() {if (mListView != null)mListView.setSelection(mListView.getBottom());}});}
这个方案有一下几个问题
1. 显示最后一条需要每次都移动到相应位置
2. 加载更多需要使用下拉刷新的样式实现(如果样式差不多,这里不是问题)
同listview的实现方式,将数据倒序加入,除了具有listview方式的问题
RecyclerView的布局是有LayoutManager控制的,LinearLayoutManager就支持了倒序的功能
1. setStackFromEnd(true)
2. setReverseLayout(true)
3. list.addFirst(item)
在数据上,可以考虑使用上面3的方法,直接添加数据到列表的头部,或者重写adapter的getItem方法,改为get(size-1-position)
ps:这里有勿,直接添加数据即可,不需要加到前面。
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() {@Overridepublic 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<String> list = new LinkedList<>();public SimpleRvAdapter(Context context) {mContext = context;}、// public void add(String item) {// list.addFirst(item);// }@Overridepublic VH onCreateViewHolder(ViewGroup parent, int viewType) {View view = LayoutInflater.from(mContext).inflate(R.layout.item, parent, false);return new VH(view);}@Overridepublic void onBindViewHolder(VH holder, final int position) {holder.textView.setText(list.get(position));holder.textView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(mContext, "position:" + position, Toast.LENGTH_LONG).show();}});}@Overridepublic 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的强大之处,,完全由你自定义的布局