android RecylearView笔记(一)基础用法

来源:互联网 发布:淘宝降权后多久恢复 编辑:程序博客网 时间:2024/06/10 23:42

   //    private LinearLayoutManager mLayoutManger; //线性管理横向纵向        //    private GridLayoutManager mGridManger;//gridview显示        //    private StaggeredGridLayoutManager mStagGridManager;//gridview管理横向,纵向        //        mLayoutManger = new LinearLayoutManager(getActivity());//创建线性布局        //        mGridManger = new GridLayoutManager(getActivity(),3);//表格gridview布局,显示为3        //        mStagGridManager = new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL);//表格布局,支持横向和纵向。显示为4                recylerView = UIUtils.findViewById(getView(),R.id.recyclerView_one);//获取id        recylerView.setHasFixedSize(true);//设置固定大小        testLinearManger = new TestLinearLayoutManger(getActivity()); //自定义划线的linearlayoutManger        testLinearManger.setOrientation(OrientationHelper.HORIZONTAL);//设置为水平方向        //给recyclerview添加管理器        recylerView.setLayoutManager(testLinearManger);        recylerView.setItemAnimator(new DefaultItemAnimator());//设置默认动画        recylerView.addItemDecoration(new TestDecoration(getActivity(),OrientationHelper.HORIZONTAL));//设置线

二:适配器 

package com.tha.adapter;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.TextView;import com.thu.R;import java.util.List;/** * Created by Administrator on 2015/11/23. */public class TestRecyclerAdapter extends RecyclerView.Adapter<TestRecyclerAdapter.ViewHolder> {        private LayoutInflater inflater;    private List<String> data;    public OnRecyclerItemClickListener onRecyclerItemClickListener;    public TestRecyclerAdapter(Context context, List<String> data,OnRecyclerItemClickListener onRecyclerItemClickListener) {        this.inflater = LayoutInflater.from(context);        this.data = data;        this.onRecyclerItemClickListener = onRecyclerItemClickListener;    }    /**     * 创建item显示类型     * 相当于用baseadapter的createView方法     * @return     */    @Override    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {         final View view = inflater.inflate(R.layout.includ_textview, null);        //这边可以做一些属性设置,甚至事件监听绑定        //view.setBackgroundColor(Color.RED);        view.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                if (onRecyclerItemClickListener != null){                    onRecyclerItemClickListener.onItemClick(view, (int) view.getTag());                }            }        });        ViewHolder viewHolder = new ViewHolder(view);        return viewHolder;    }    /**     * 数据的绑定显示     *   i相当于position     *   onbindviewholder相当于setTag和getTag     */    @Override    public void onBindViewHolder(ViewHolder viewHolder, int i) {        viewHolder.textView.setText(data.get(i));        viewHolder.itemView.setTag(i);    }    /**     * 相当于baseAdapter中的getcount方法     * @return     */    @Override    public int getItemCount() {        return data.size();    }    public static class ViewHolder extends RecyclerView.ViewHolder{        TextView textView;        public ViewHolder(View itemView) {            super(itemView);            textView = (TextView) itemView.findViewById(R.id.includ_textview);        }    }    /**     * 添加数据     */    public void addItem(String datas,int position){        data.add(position,datas);        notifyItemInserted(position);    }    public void addItem(String datas){        data.add(datas);        notifyDataSetChanged();    }    /**     * 删除数据     */    public void removeItem(String datas){        int position = data.indexOf(datas);        data.remove(position);        notifyItemRemoved(position);    }    public void removeItem(int position){        data.remove(position);        notifyItemRemoved(position);    }    /**     * 自定义RecyclerView 中item view点击回调方法     */   public interface OnRecyclerItemClickListener{        /**         * item view 回调方法         * @param view  被点击的view         * @param position 点击索引         */        void onItemClick(View view,int position);    }}

三:自定义画线

package com.thimport android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.Rect;import android.graphics.drawable.Drawable;import android.support.v7.widget.OrientationHelper;import android.support.v7.widget.RecyclerView;import android.view.View;import android.view.ViewGroup;/** * Created by Administrator on 2015/11/23. */public class TestDecoration extends RecyclerView.ItemDecoration {        //采用系统内置的分割线    public static final int[] attrs = new int[]{android.R.attr.listDivider};    private Drawable mDivider;    private int orientation;    public TestDecoration(Context context,int orientation){        TypedArray typedArray = context.obtainStyledAttributes(attrs);//将线转换成流绘制        mDivider = typedArray.getDrawable(0);        typedArray.recycle();        this.orientation = orientation;    }    /**     * 进行自定义绘制     */    @Override    public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {        super.onDraw(c, parent, state);        //绘制垂直方向的线        drawVertical(c,parent);    }//    private void drawVertical(Canvas c, RecyclerView parent) {//        int left = parent.getPaddingLeft();//        int right = parent.getWidth() - parent.getPaddingRight();//        int childCount = parent.getChildCount();//        for (int i = 0; i < childCount; i++) {//            View childAt = parent.getChildAt(i);//            RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) childAt.getLayoutParams();//            int top = childAt.getBottom() + layoutParams.rightMargin;//            int buttom = top + mDivider.getIntrinsicHeight();//            mDivider.setBounds(left,top,right,buttom);//            mDivider.draw(c);//        }//    }    private void drawVertical(Canvas c, RecyclerView parent) {        int top = parent.getPaddingTop();//获取内边距上半部分的高        int buttom = parent.getHeight() - parent.getPaddingBottom();//总高度 - 内边距的下半部分的高        int childCount = parent.getChildCount();//获取子控件的长度        for (int i = 0; i < childCount; i++) {            //循环一个一个进行复制            View childAt = parent.getChildAt(i);            RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) childAt.getLayoutParams();            int left = childAt.getRight() + layoutParams.rightMargin;//从左开始绘制            int right = left + mDivider.getIntrinsicWidth();//到宽度总为止            mDivider.setBounds(left,top,right,buttom);            mDivider.draw(c);        }    }    /**     * 绘制整个区域范围     */    @Override    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {        super.getItemOffsets(outRect, view, parent, state);        ////        if (OrientationHelper.HORIZONTAL == orientation) {            outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0);//        }else {//            outRect.set(0,0,0,mDivider.getIntrinsicHeight());水平方向的线//        }        //在布局中: recylerView.addItemDecoration(new TestDecoration(getActivity(),OrientationHelper.VERTICAL));//设置线    }}


五:画的线充满屏幕不能匹配布局,即使设置成wrap_content都不管用,所以要自定义布局管理,实现onMeasure方法

package com.tha.view;import android.content.Context;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.View;/** * Created by Administrator on 2015/11/24. */public class TestLinearLayoutManger extends LinearLayoutManager {    public TestLinearLayoutManger(Context context) {        super(context);    }    @Override    public void onMeasure(RecyclerView.Recycler recycler, RecyclerView.State state, int widthSpec, int heightSpec) {        View view=recycler.getViewForPosition(0);        if(view!=null){            measureChild(view,widthSpec,heightSpec);            int mWidth=View.MeasureSpec.getSize(widthSpec);            int mHeight=view.getMeasuredHeight();            setMeasuredDimension(mWidth,mHeight);        }    }}


感谢作者:http://blog.csdn.net/developer_jiangqq/article/details/49967587

0 0
原创粉丝点击