Android笔记系列--RecyclerView.Adapter使用

(1)定义一个Adapter 继承于RecyclerView.Adapter

public class TaskListAdapter extends RecyclerView.Adapter<TaskListAdapter.TaskHolder> {
   private Context context;
   private List<TomatoTask> tomatoTasks;
   private MyOnclickListener myOnclickListener;
   public interface MyOnclickListener{
       void clickDel(int position);
    }
   public void setOnClickListener(MyOnclickListener myOnclickListener){
       this.myOnclickListener = myOnclickListener;
    }
   public TaskListAdapter(Context context, List<TomatoTask> tomatoTasks) {
       this.context = context;
       this.tomatoTasks = tomatoTasks;
    }
   @Override
   public TaskHolder onCreateViewHolder(ViewGroup parent, int viewType) {
       View view = LayoutInflater.from(context).inflate(R.layout.item_task, parent, false);
       return new TaskHolder(view);
    }
   @Override
   public void onBindViewHolder(TaskHolder holder, final int position) {
       holder.tv_taskName.setText(tomatoTasks.get(position).getTaskName());
       holder.iv_todo.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View view) {
            ......        
            }
        });
       holder.iv_del.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View view) {
                ......
            }
        });
    }
   @Override
   public int getItemCount() {
       Log.i("getItemCount---","-------");
       return tomatoTasks.size();
    }
   class TaskHolder extends RecyclerView.ViewHolder {
       @BindView(R.id.tv_item_taskname)
       TextView tv_taskName;
       @BindView(R.id.iv_todo)
       DiyButton iv_todo;
       @BindView(R.id.iv_del)
       DiyButton iv_del;
       public TaskHolder(View itemView) {
           super(itemView);
           ButterKnife.bind(this, itemView);
        }
    }
}

(2)布局文件使用 RecyclerView

<android.support.v7.widget.RecyclerView
           android:id="@+id/recyclerview"
           android:divider="#ffff0000"
           android:dividerHeight="10dp"
           android:layout_width="match_parent"
           android:layout_height="match_parent" />

(3)这步可以省略,如果不使用分割线,RecyclerView默认是没有分割线的
自定义一个ItemDecoration 类继承于RecyclerView.ItemDecoration

public class DividerItemDecoration extends RecyclerView.ItemDecoration {private static final int[] ATTRS = new int[]{
           android.R.attr.listDivider
    };
​
   public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL;
​
   public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL;
​
   private Drawable mDivider;
​
   private int mOrientation;
​
   public DividerItemDecoration(Context context, int orientation) {
       final TypedArray a = context.obtainStyledAttributes(ATTRS);
       mDivider = a.getDrawable(0);
       a.recycle();
       setOrientation(orientation);
    }
​
   public void setOrientation(int orientation) {
       if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) {
           throw new IllegalArgumentException("invalid orientation");
        }
       mOrientation = orientation;
    }
​
   @Override
   public void onDraw(Canvas c, RecyclerView parent) {
       Log.v("itemdecoration", "onDraw()");
​
       if (mOrientation == VERTICAL_LIST) {
           drawVertical(c, parent);
        } else {
           drawHorizontal(c, parent);
        }
​
    }
​
​
   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);
           android.support.v7.widget.RecyclerView v = new android.support.v7.widget.RecyclerView(parent.getContext());
           final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
                    .getLayoutParams();
           final int top = child.getBottom() + params.bottomMargin;
           final int bottom = top + mDivider.getIntrinsicHeight();
           mDivider.setBounds(left, top, right, bottom);
           mDivider.draw(c);
        }
    }
​
   public void drawHorizontal(Canvas c, RecyclerView parent) {
       final int top = parent.getPaddingTop();
       final int bottom = parent.getHeight() - parent.getPaddingBottom();
​
       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 left = child.getRight() + params.rightMargin;
           final int right = left + mDivider.getIntrinsicHeight();
           mDivider.setBounds(left, top, right, bottom);
           mDivider.draw(c);
        }
    }
​
   @Override
   public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) {
       if (mOrientation == VERTICAL_LIST) {
           outRect.set(0, 0, 0, mDivider.getIntrinsicHeight());
        } else {
           outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0);
        }
    }
}

(4)为RecyclerView设置Adapter

taskListAdapter = new TaskListAdapter(context,tomatoTaskList);
//设置Adapter
recyclerview.setAdapter(taskListAdapter);
//设置布局管理器
recyclerview.setLayoutManager(new LinearLayoutManager(context));
//设置分隔线
recyclerview.addItemDecoration( new DividerItemDecoration(context,DividerItemDecoration.VERTICAL_LIST));
//设置增加或删除条目的动画
recyclerview.setItemAnimator( new DefaultItemAnimator());
LayoutManager 目前只有LinearLayoutManager和GridLayoutManager,可以自己继承RecyclerView.LayoutManager实现自己的LayoutManager 。
这个动画也是可以自定义的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

繁星点点-

请我喝杯咖啡呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值