RecyclerView實現倒序列表

RecyclerView實現倒序列表

標籤(空格分隔): android RecyclerView 倒序android


##一、寫在前面 實現一個聊天界面,就是相似QQ那種,這裏是講一下倒序排列,不實現QQ的各類高級功能ide

##二、ListView 反轉數據 只要把數據倒序加入到adapter的數據集中,就能夠實現倒序效果佈局

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

這個方案有一下幾個問題post

  1. 顯示最後一條須要每次都移動到相應位置
  2. 加載更多須要使用下拉刷新的樣式實現(若是樣式差很少,這裏不是問題)

##三、RecyclerViewthis

###方案1、反轉數據 同listview的實現方式,將數據倒序加入,除了具備listview方式的問題code

###方案2、反轉列表 RecyclerView的佈局是有LayoutManager控制的,LinearLayoutManager就支持了倒序的功能get

  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<String> 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的強大之處,,徹底由你自定義的佈局it

相關文章
相關標籤/搜索