关于RecycleView的使用笔记

2017-11-18  本文已影响0人  丶奏

RecyclerView是Google在API 21下support.V7包里的控件,相对于ListView或GridView,灵活度更高

RecyclerView的布局方式

LinearLayoutManager:线性布局,横向或者纵向滑动列表
GridLayoutManager:表格布局
StaggeredGridLayoutManager:流式布局

RecycleView的高度展开 在RecycleView

@Override
protected void onMeasure(intwidthMeasureSpec,intheightMeasureSpec) {

    intexpandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2,MeasureSpec.AT_MOST);

    super.onMeasure(widthMeasureSpec, expandSpec);

}

RecycleView高度展开并被其他同向可滑动布局嵌套时,可设置让其可惯性滑动

rv.setNestedScrollingEnabled(false);

如果确定每个item高度都是固定的时,可以使用以下属性提高性能

rv.setHasFixedSize(true);

横向的ListView

mLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);

默认动画效果

rv.setItemAnimator(newDefaultItemAnimator());

RecycleView添加分割线

//一般实现方式
rv.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.HORIZONTAL_LIST));
//也可以通过在item添加一个在底部的View实现

添加多种布局 下面举个栗子,要实现更多布局也只需要加个参数判断就可以了

//在RecycleView的Adapter中可以通过实现getItemViewType方法
@Override
public int getItemViewType(int position) {
     if(mHeadView == null) return TYPE_NORMAL;
     if(position == 0) return TYPE_HEADER;
     return TYPE_NORMAL;
 }
//然后可以在onCreateViewHolder中根据viewType启用不同布局
@Override
public MineHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    if(viewType == TYPE_HEADER){
        return new HeadViewHolder(mHeadView);
    }else{
        return new ItemViewHolder(mItemView);
    }
    return holder;
}
//最后在onBindViewHolder实现你对每个布局的操作
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    if(holder instanceof  HeadViewHolder){
        //对头布局的操作
        ...
    }else{
        //对Item操作
        ...
    }
}

本人Android小白一枚,如有错误,望指正

上一篇下一篇

猜你喜欢

热点阅读