android 控件 recyclerview
2016-09-20 15:32
302 查看
概括
你想要控制其显示的方式,请通过布局管理器LayoutManager你想要控制Item间的间隔(可绘制),请通过ItemDecoration
你想要控制Item增删的动画,请通过ItemAnimator
你想要控制点击、长按事件,请自己写(擦,这点尼玛。)
mRecyclerView = findView(R.id.id_recyclerview);
mRecyclerView.setLayoutManager(layout);//设置布局管理器
mRecyclerView.setAdapter(adapter);//设置adapter
mRecyclerView.setItemAnimator(new DefaultItemAnimator());//设置Item增加、移除动画
mRecyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.HORIZONTAL_LIST));//添加分割线
适配器
private class HomeAdapter extends RecyclerView.Adapter {private Context mContext;
private List<String> mDatas;
private LayoutInflater mInflater;
//把数据传递过来
public HomeAdapter(List<String> mDatas) {
this.mDatas = mDatas;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
mContext = parent.getContext();
mInflater = LayoutInflater.from(mContext);
//布局,添加itemview
View view = mInflater.inflate(R.layout.item_recycler, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
//item布局绑定数据
MyViewHolder myViewHolder = (MyViewHolder) holder;
myViewHolder.mTextView.setText(mDatas.get(position));
}
@Override
public int getItemCount() {
//大小
return mDatas.size();
}
//recyclerview的控件管理
private class MyViewHolder extends RecyclerView.ViewHolder {
TextView mTextView;
public MyViewHolder(View itemView) {
super(itemView);
mTextView = (TextView) itemView.findViewById(R.id.id_num);
}
}
}
分割线
public class ItemDivider extends RecyclerView.ItemDecoration {private Drawable mDrawable;
private final int[] ATTRS = new int[]{
android.R.attr.listDivider//系统定义的list的分割线属性
};
public ItemDivider(Context context) {
final TypedArray a = context.obtainStyledAttributes(ATTRS);
mDrawable = a.getDrawable(0);//得到分割线的drawable
a.recycle();
}
public void drawVertical(Canvas c, RecyclerView parent) {
final int left = parent.getPaddingLeft();
final int right = parent.getWidth() - parent.getPaddingRight();
final int childCount = parent.getChildCount();
for (int i = 0; i < childCount; i++) {
final View child = parent.getChildAt(i);
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
final int top = child.getBottom() + params.bottomMargin;
final int bottom = top + mDrawable.getIntrinsicHeight();
mDrawable.setBounds(left, top, right, bottom);
mDrawable.draw(c);
}
}
@Override
public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
drawVertical(c, parent);
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
outRect.set(0, 0, 0, mDrawable.getIntrinsicHeight());
}
}
自定义分割线
<!-- Application theme. --><style name="AppTheme" parent="AppBaseTheme">
<item name="android:listDivider">@drawable/divider_bg</item> //在你指定的统一样式中,把系统的listdivider指向自己的divider_bg
</style>
然后自己写个drawable即可,下面我们换一种分隔符:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<gradient
android:centerColor="#ff00ff00"
android:endColor="#ff0000ff"
android:startColor="#ffff0000"
android:type="linear" />
<size android:height="4dp"/>
</shape>
LayoutManager
LinearLayoutManager 现行管理器,支持横向、纵向。GridLayoutManager 网格布局管理器
StaggeredGridLayoutManager 瀑布就式布局管理器
ItemAnimator
// 设置item动画mRecyclerView.setItemAnimator(new DefaultItemAnimator());
注意,这里更新数据集不是用adapter.notifyDataSetChanged()而是
notifyItemInserted(position)与notifyItemRemoved(position)
否则没有动画效果。
上述为adapter中添加了两个方法:
public void addData(int position) {
mDatas.add(position, "Insert One");
notifyItemInserted(position);
}
public void removeData(int position) {
mDatas.remove(position);
notifyItemRemoved(position);
}
相关文章推荐
- Android开发之滚动控件RecyclerView
- Android RecyclerView 使用完全解析 体验艺术般的控件
- Android RecyclerView 使用完全解析 体验艺术般的控件
- Android之RecyclerView控件的简单运用
- Android RecyclerView 使用完全解析 体验艺术般的控件
- Android RecyclerView 使用完全解析 体验艺术般的控件
- Android RecyclerView 使用完全解析 体验艺术般的控件
- Android RecyclerView 使用完全解析 体验艺术般的控件
- Android RecyclerView 使用完全解析 体验艺术般的控件
- Android 5.x(一) 新控件之RecyclerView,CardView,Palette的使用
- Android RecyclerView 使用完全解析 体验艺术般的控件
- Android RecyclerView 使用完全解析 体验艺术般的控件
- (转)Android RecyclerView 使用完全解析 体验艺术般的控件
- Android UI控件之RecyclerView的简单应用
- Android MaterialDesign控件使用以及RecyclerView,ItemDecoration的基本使用
- Android RecyclerView 使用完全解析 体验艺术般的控件
- Android RecyclerView 使用完全解析 体验艺术般的控件
- Android RecyclerView 使用完全解析 体验艺术般的控件
- android 自定义下拉刷新上拉加载控件(SwipeRefreshLayout + recyclerView)
- Android 基于RecyclerView上下拉刷新(让你轻松自定义头部和底部刷新控件)