鉴于RecyclerView较之于ListView和GrideView有较大的灵活性,现在比较流行。
本菜今天学习下RecyclerView
转载请注明出处#
[我的博客]http://www.lostbug.com
RecyclerView是谷歌V7包下新增的控件,用来替代ListView的使用
RecyclerView is a more advanced and flexible version of ListView. This widget is a container for large sets of views that can be recycled and scrolled very efficiently. Use the RecyclerView widget when you have lists with elements that change dynamically
整体上看RecyclerView架构,提供了一种插拔式的体验,高度的解耦,异常的灵活,通过设置它提供的不同LayoutManager,ItemDecoration , ItemAnimator实现令人瞠目的效果。
首先,在xml文件中写入控件:
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"/>
在activity中引用,并设置初始化
RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
//设置布局管理器
// mRecyclerView.setLayoutManager(new LinearLayoutManager(this)) ;//ListView
mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));//GridView
// mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, OrientationHelper.VERTICAL));//瀑布流
//设置Item添加、移除动画
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
//添加分割线
// mRecyclerView.addItemDecoration(RecyclerView.ItemDecoration);
重写RecyclerView的Adapter类
/**
* www.lostbug.com
* Created by admin on 2016/6/12.
*/
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.NormalTextViewHolder> {
private Context mContext;
private ArrayList mData;
public void setData(ArrayList data) {
mData = data;
}
public RecyclerAdapter(Context context) {
mContext = context;
}
@Override
public int getItemCount() {
return mData == null ? 0 : mData.size();
}
@Override
public NormalTextViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
NormalTextViewHolder myViewHolder =
new NormalTextViewHolder(LayoutInflater.from(mContext).
inflate(R.layout.item_recycler, parent, false));
return myViewHolder;
}
@Override
public void onBindViewHolder(NormalTextViewHolder holder, int position) {
try {
holder.tv.setText((String) mData.get(position));
} catch (Exception e) {
}
}
class NormalTextViewHolder extends RecyclerView.ViewHolder {
TextView tv;
public NormalTextViewHolder(View itemView) {
super(itemView);
tv = (TextView) itemView.findViewById(R.id.item_textView);
}
}
}
最后在activity中给RecyclerView传入数据:
RecyclerAdapter mRecyclerAdapter;
mRecyclerView.setAdapter(mRecyclerAdapter=new RecyclerAdapter(this));
ArrayList<String> names=new ArrayList<>();
names.add("Java");
names.add("Android");
names.add("C++");
names.add("PHP");
names.add("Html");
names.add("Spring");
mRecyclerAdapter.setData(names);
mRecyclerAdapter.notifyDataSetChanged();