学习RecyclerView的一些东西

来源:互联网 发布:seo三人行 编辑:程序博客网 时间:2024/06/05 05:50

感觉5.0以后RecyclerView基本上能完成替代listView,gridview之类的了。

必须设置布局管理,以及RecyclerView.adapter才可以正常显示。

<span style="font-size:18px;">LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);mRecyclerView.setLayoutManager(linearLayoutManager);</span>


GridView网格类型布局:

<span style="font-size:18px;">mRecyclerView.setLayoutManager(new GridLayoutManager(this, 3));</span>
横向网格布局

mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(5, StaggeredGridLayoutManager.HORIZONTAL));

可以设置增加item删除item的动画效果

// 设置动画效果mRecyclerView.setItemAnimator(new DefaultItemAnimator());
自己自定义实现ItemAnimator效果更好


需要注意:使用RecyclerView的item之间没有分割线,需要实现ItemDecoration

// 设置分割线DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST);mRecyclerView.addItemDecoration(dividerItemDecoration);
或者直接在Item的布局上使用margin来用背景色充当分割线。


Adapter继承RecyclerView.adapter

public class SimpleAdapter extends RecyclerView.Adapter<MyViewHolder> {    private Context mContext;    private LayoutInflater mInflater;    private List<String> mDataList;    public SimpleAdapter(Context context, List<String> list) {        mContext = context;        mDataList = list;        mInflater = LayoutInflater.from(context);    }    public void addData(int position) {        mDataList.add("insert");        notifyItemInserted(position);    }    public void deleteData(int position) {        mDataList.remove(position);        notifyItemRemoved(position);    }    @Override    public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {        View view = mInflater.inflate(R.layout.item_view, viewGroup, false);        MyViewHolder holder = new MyViewHolder(view);        return holder;    }    @Override    public void onBindViewHolder(MyViewHolder myViewHolder, int i) {        myViewHolder.text.setText(mDataList.get(i));    }    @Override    public int getItemCount() {        return mDataList.size();    }}class MyViewHolder extends RecyclerView.ViewHolder {    public TextView text;    public MyViewHolder(View itemView) {        super(itemView);        text = (TextView) itemView.findViewById(R.id.textview);    }}
注意要使用ViewHolder。

使用onBindViewHolder方法来绑定数据。

OnCreateViewHolder方法来创建生成布局。



实现瀑布流时使用:

// 设置布局管理        StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL);        mRecyclerView.setLayoutManager(staggeredGridLayoutManager);
需要使item的高度相互之间有差值。


注意RecyclerView不支持item的点击事件,需要自己在adapter里设置点击监听事件。

若在activity里实现监听事件时,由于动态增加的item的没有使用notifyChanged()来刷新整个布局,会导致从监听中穿过来得position有误,使用getChildPosition()会更好。









0 0
原创粉丝点击