android RecyclerView的使用
2016-07-11 14:52
671 查看
RecyclerView是谷歌V7包下新增的控件,用来替代ListView的使用,在RecyclerView标准化了ViewHolder类似于ListView中convertView用来做视图缓.
首先要用这个控件,你需要在gradle文件中添加包的引用
然后是在XML文件用使用它
接着在Activity中设置它
然后是适配器
*设置item之间的距离
public class SpaceItemDecoration extends RecyclerView.ItemDecoration {
int space;
public SpaceItemDecoration(int s){
this.space = s;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
if(parent.getChildLayoutPosition(view)!=0){
outRect.top = space;
}
}
}
在程序中调用:
mRvDisplay.addItemDecoration(new SpaceItemDecoration(15));//设置item间距
*设置不同布局的item
设置分割线
首先要用这个控件,你需要在gradle文件中添加包的引用
compile 'com.android.support:recyclerview-v7:21.0.3'
然后是在XML文件用使用它
<android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/recycler_view"/>
接着在Activity中设置它
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));//线性显示 类似于listview //mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));//线性宫格显示 类似于GridView //mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, OrientationHelper.VERTICAL));//线性宫格显示 类似于瀑布流 mRecyclerView.setAdapter(new NormalRecyclerViewAdapter(this));
然后是适配器
public class NormalRecyclerViewAdapter extends RecyclerView.Adapter<NormalRecyclerViewAdapter.NormalTextViewHolder> { private final LayoutInflater mLayoutInflater; private final Context mContext; private String[] mTitles; public NormalRecyclerViewAdapter(Context context, String[] title) { mTitles = title; mContext = context; mLayoutInflater = LayoutInflater.from(context); } @Override public NormalTextViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new NormalTextViewHolder(mLayoutInflater.inflate(R.layout.item_text, parent, false)); } @Override public void onBindViewHolder(NormalTextViewHolder holder, int position) { holder.mTextView.setText(mTitles[position]); } @Override public int getItemCount() { return mTitles == null ? 0 : mTitles.length; } public static class NormalTextViewHolder extends RecyclerView.ViewHolder { @Bind(R.id.text_view) TextView mTextView; NormalTextViewHolder(View view) { super(view); ButterKnife.bind(this, view); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d("NormalTextViewHolder", "onClick--> position = " + getPosition()); } }); } } }
*设置item之间的距离
public class SpaceItemDecoration extends RecyclerView.ItemDecoration {
int space;
public SpaceItemDecoration(int s){
this.space = s;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
if(parent.getChildLayoutPosition(view)!=0){
outRect.top = space;
}
}
}
在程序中调用:
mRvDisplay.addItemDecoration(new SpaceItemDecoration(15));//设置item间距
*设置不同布局的item
public class MultipleItemAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { public static enum ITEM_TYPE { ITEM_TYPE_IMAGE, ITEM_TYPE_TEXT } private final LayoutInflater mLayoutInflater; private final Context mContext; private String[] mTitles; public MultipleItemAdapter(Context context, String[] title) { mTitles = title; mContext = context; mLayoutInflater = LayoutInflater.from(context); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == ITEM_TYPE.ITEM_TYPE_IMAGE.ordinal()) { return new ImageViewHolder(mLayoutInflater.inflate(R.layout.item_image, parent, false)); } else { return new TextViewHolder(mLayoutInflater.inflate(R.layout.item_text, parent, false)); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (holder instanceof TextViewHolder) { ((TextViewHolder) holder).mTextView.setText(mTitles[position]); } else if (holder instanceof ImageViewHolder) { ((ImageViewHolder) holder).mTextView.setText(mTitles[position]); } } @Override public int getItemViewType(int position) { return position % 2 == 0 ? ITEM_TYPE.ITEM_TYPE_IMAGE.ordinal() : ITEM_TYPE.ITEM_TYPE_TEXT.ordinal(); } @Override public int getItemCount() { return mTitles == null ? 0 : mTitles.length; } public static class TextViewHolder extends RecyclerView.ViewHolder { @Bind(R.id.text_view) TextView mTextView; TextViewHolder(View view) { super(view); ButterKnife.inject(this, view); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d("TextViewHolder", "onClick--> position = " + getPosition()); } }); } } public static class ImageViewHolder extends RecyclerView.ViewHolder { @Bind(R.id.text_view) TextView mTextView; @Bind(R.id.image_view) ImageView mImageView; ImageViewHolder(View view) { super(view); ButterKnife.inject(this, view); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d("ImageViewHolder", "onClick--> position = " + getPosition()); } }); }
}}[/code]
设置分割线
public class MyItemDecoration extends RecyclerView.ItemDecoration { private static final int[] ATTRS = {android.R.attr.listDivider}; private Drawable mDivider; public MyItemDecoration(Context context) { TypedArray array = context.obtainStyledAttributes(ATTRS); // 获取分隔条[/code]
mDivider = context.getResources().getDrawable(R.drawable.divider);
array.recycle(); } @Override public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) { super.onDrawOver(c, parent, state); int count = parent.getChildCount(); int left = parent.getPaddingLeft(); int right = parent.getWidth()-parent.getPaddingRight(); for(int i = 0; i < count; i++) { View v = parent.getChildAt(i); RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) v.getLayoutParams(); int top = v.getBottom() + params.bottomMargin; int bottom = top + mDivider.getIntrinsicHeight(); mDivider.setBounds(left,top,right,bottom); mDivider.draw(c); } } }
相关文章推荐
- android自定义View二(View的种类)
- Jrebel For Android 破解过程
- Android抢红包助手开发全攻略
- Android 3.0 Hardware Acceleration
- Android学习笔记二十四之ListView列表视图二
- android EditText 监听复制粘贴等操作
- Android6.0的phone应用源码分析(1)——智能手机的硬件结构介绍
- android 多线程断点续传下载
- Android使用Handler和Message更新UI
- 那些做Android开发必须知道的ADB命令
- Android xml资源文件中@、@android:type、@*、?、@+含义和区别
- 2048
- 我常用的BaseHandler
- Android下拉刷新以及GridView使用方法详解
- 使用viewPager实现引导页
- android studio Git版本管理工具的使用
- 带有一键清空功能的EditText
- Nexus 7 搞机教程
- android 按钮防止连续点击防止按钮重复点击
- android 多线程断点续传下载 三