昨天说了最简单的用法,今天说点别的,项目还是接着昨天的项目写的。
首先。昨天在写Adapter的时候传了两个参数,一个是数据类型,还有一个是BaseViewHolder,他这个框架的BaseViewHolder提供了很多方法,一般的项目直接用他这个就可以了,但是也可以自己重写BaseViewHolder。我就重写了一个,很简单的内容,只是给大家提供一个思路罢了;代码如下:
public class MyBaseViewHolder extends BaseViewHolder{
public MyBaseViewHolder(View view) {
super(view);
}
/**
* 给View设置标题
* @param viewId view的id
* @param title 标题的内容
* @return
*/
public BaseViewHolder setText(int viewId, String title) {
TextView view = getView(viewId);
view.setText(title);
return this;
}
/**
* 给imageView设置图片
* @param viewId imageView的id
* @param imgUrl 图片的url
* @return
*/
public BaseViewHolder setImageResource(int viewId, String imgUrl) {
ImageView view = getView(viewId);
Glide.with(MainActivity.context).load(imgUrl).into(view);
return this;
}
}
我重写了一个设置标题的方法,和一个显示图片的方法。一眼就能看明白,我要多说一句的是,图片显示我使用的谷歌推荐的一个开源框架Glide,可以自己去集成,用法很简单。这里重写了ViewHolder,在你重写的adapter的参数ViewHolder也要改成你重写的。
接着要说的就是点击事件了,他这个框架点击事件是独立的,他已经给我们封装好了,以前,我们老碰到子view是button的时候,点击事件被拦截,他这个开源框架的点击事件已经给我们处理好了,我们只用按照他的调用就可以了。代码如下:
private void initItemClickListener() {
adapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
ShowToast(context,"点击了第"+position+"个item");
}
});
adapter.setOnItemLongClickListener(new BaseQuickAdapter.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(BaseQuickAdapter adapter, View view, int position) {
ShowToast(context,"长按了第"+position+"个item");
return false;
}
});
}
再就是子view的点击事件,跟item的点击事件不同的是,他这个子view的点击事件需要在adapter的convert方法里面绑定。绑定代码如下:
protected void convert(MyBaseViewHolder helper, ShuJu item) {
helper.setText(R.id.tv,item.getTitle())
.addOnClickListener(R.id.btn1)
.addOnClickListener(R.id.btn2)
.addOnClickListener(R.id.btn3)
.addOnLongClickListener(R.id.btn1)
.addOnLongClickListener(R.id.btn2)
.addOnLongClickListener(R.id.btn3)
String imgUrl = "http://img2.3lian.com/2014/f6/173/d/51.jpg"
helper.setImageResource(R.id.img,imgUrl)
// Glide.with(context).load(imgUrl).into((ImageView) helper.getView(R.id.img))
}
点击事件的代码如下:
private void initChildItemClickListener() {
adapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {
@Override
public boolean onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
switch (view.getId()){
case R.id.btn1:
ShowToast(context,"点击了第"+position+"个item的第一个按钮");
break;
case R.id.btn2:
ShowToast(context,"点击了第"+position+"个item的第二个按钮");
break;
case R.id.btn3:
ShowToast(context,"点击了第"+position+"个item的第三个按钮");
break;
}
return false;
}
});
adapter.setOnItemChildLongClickListener(new BaseQuickAdapter.OnItemChildLongClickListener() {
@Override
public void onItemChildLongClick(BaseQuickAdapter adapter, View view, int position) {
switch (view.getId()){
case R.id.btn1:
ShowToast(context,"长按了第"+position+"个item的第一个按钮");
break;
case R.id.btn2:
ShowToast(context,"长按了第"+position+"个item的第二个按钮");
break;
case R.id.btn3:
ShowToast(context,"长按了第"+position+"个item的第三个按钮");
break;
}
}
});
}
根据子View的id判断点击了哪个控件,然后做对应的操作即可。
最后一个就是添加动画效果,默认提供5种动画。代码如下:
private void initAnimation() {
adapter.openLoadAnimation(BaseQuickAdapter.SCALEIN);
adapter.isFirstOnly(false);
}
当然也可以自定义动画,代码如下:
quickAdapter.openLoadAnimation(new BaseAnimation() {
@Override
public Animator[] getAnimators(View view) {
return new Animator[]{
ObjectAnimator.ofFloat(view, "scaleY", 1, 1.1f, 1),
ObjectAnimator.ofFloat(view, "scaleX", 1, 1.1f, 1)
};
}
});
要说的就这么多,自己实际操作一遍就会了。
项目链接