您的位置:首页 > 其它

RecyclerView完全解析

2016-06-26 11:46 357 查看
1)RecyclerView是什么?

是一种新的视图组,可完全代替ListView和GridView,可以为任何基于适配器的视图提供相似的渲染方式,在有限的窗口中展示大量的数据集;高度解耦、异常灵活;可通过设置不同的LayoutManager、ItemDecoration和ITEMAnimator来实现不同的效果。

2)使用步骤

①加入依赖

compile 'com.android.support:recyclerview-v7:21.0.+'
②将RecyclerView加入布局文件中

<android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/recycler_view"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"/>
 

③在代码中得到RecyclerView控件的实例

mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
 

④配置RecyclerView的数据源,一般在项目中都是由网络操作得到数据后,封装到Bean中,然后加入到List<Bean>中作为数据源

⑤实现RecyclerView的Adapter适配器

->继承RecyclerView.Adapter

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>
->实现ViewHolder类,ViewHolder主要用来加载View(findByView方法),配置每个Item的监听器

class ViewHolder extends RecyclerView.ViewHolder{

    private TextView mTextView;
    public ViewHolder(View itemView) {
        super(itemView);
        mTextView = (TextView) itemView.findViewById(R.id.text_title);

        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(listener != null){
                    listener.onItemClicked(view, getLayoutPosition(), datas.get(getLayoutPosition()));
                }
            }
        });
    }
}
->实现适配器的构造器,将参数传入

public MyAdapter(Context context, List<String> datas) {
    this.datas = datas;
    mLayoutInflater = LayoutInflater.from(context);
}
 

->实现OnCreateView方法,主要就是为了将ItemView的布局文件传给ViewHolder

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    return new ViewHolder(mLayoutInflater.inflate(R.layout.template_home_cardview, parent, false));
}
 

->实现onBindView方法,主要是为了将数据与空间进行绑定,将数据装载到控件中

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    holder.mTextView.setText(datas.get(position));
}
 

->实现Adapter的其他方法

->为Adapter提供监听器,此监听器会绑定到每个Item上

private OnItemClickListener listener;

public void setListener(OnItemClickListener listener) {
    this.listener = listener;
}
public interface OnItemClickListener{
    void onItemClicked(View view, int position, String str);
}
@Override
public void onClick(View view) {
     if(listener != null){
           listener.onItemClicked(view,getLayoutPosition(), datas.get(getLayoutPosition()));
     }
}

->为Adapter提供公共方法以供外界调用,如增加数据、删除数据等等。。。

public void addData(int position, String str){
    datas.add(position, str);
    notifyItemInserted(position);
}

public void  removeData(int position){
    datas.remove(position);
    notifyItemRemoved(position);
}
 

⑥实例化Adapter,将数据传入

adapter = new MyAdapter(HomeFragment.this.getActivity(), datas);
 

⑦为每个Item设置监听器

adapter.setListener(new MyAdapter.OnItemClickListener() {
    @Override
    public void onItemClicked(View view, int position, String str) {
        Toast.makeText(getContext(), str, Toast.LENGTH_LONG).show();

    }
});
 

⑧为RecyclerView绑定适配器

mRecyclerView.setAdapter(adapter);
 

⑨为RecyclerView设置布局管理器

mRecyclerView.setLayoutManager(new LinearLayoutManager(HomeFragment.this.getActivity()));


mRecyclerView.setLayoutManager(new GridLayoutManager(HomeFragment.this.getActivity(),3));
⑩设置Decoration和Animator

mRecyclerView.addItemDecoration(new DividerItemDecoration(HomeFragment.this.getContext(), DividerItemDecoration.HORIZONTAL_LIST));
mRecyclerView.addItemAnimator();
现在,一个RecyclerView就已经可以使用了,更多的,比如结合CardView实现、通用Adapter的实现,图片加载的优化(Picasso)都会在后面进行讲解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: