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
- android RecylearView笔记(一)基础用法
- Android基础学习笔记之-ListView用法(一)
- Android基础笔记一
- Android基础笔记(一)
- android笔记(一)mkyaffs2image的用法
- Android DataBinding 基础用法一
- android学习笔记一(基础篇)
- Android基础学习笔记(一)
- Android基础笔记(一)-快速入门
- android基础学习笔记一(logcat)
- Android-基础笔记-HTTP (一)
- Android学习笔记一基础
- ANDROID STUDIO 使用 AIDL(一)基础用法
- Android学习笔记(一):Toolbar用法详解
- Android学习笔记一之Android基础
- Android学习笔记一之Android基础
- Android学习笔记(基础)之数据存储(一)
- android 学习笔记(一)基础篇(完善中)
- 星空代码
- [Built-in Functions] - B
- vs2012编译c语言-指针不能判NULL
- 爬虫-scrapy安装(新)
- Servlet3.0大体上
- android RecylearView笔记(一)基础用法
- unity3d 中粒子系统的释放
- thinkphp 刚刚添加了一个hot字段,但是打死都更新不了
- AlertDialog.Builder和Dialog分析
- <学习笔记>安装apk报错:an error occured while deploying the file install failed older sdk
- requirejs:模块加载(require)及定义(define)时的路径小结
- 通达OA2008从windows环境移植到linux部署手册
- Maven实战——常用Maven插件介绍
- phpcms框架问题