您的位置:首页 > 其它

学习RecyclerView的一些东西

2015-06-15 20:39 351 查看
感觉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()会更好。

[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: