前言
(本人菜鸟,如有错误请指正)
一直奇怪网上说的Recycler让自己定制点击事件是怎么回事,看了这个大牛的仿知乎 Android客户端源码才知道,他是这样做的—- 写了一个RecyclerView的ViewHolder并且让它实现Onclicklistenner 然后在ViewHolder内部定义了一个ClickResponseListener接口,然后在构造函数里面接收到new 出来的ClickResponseListener接口,然后为item设置OnclickListener时回调ClickResponseListener的方法,来看看大牛具体是怎么做的:
public CardViewHolder(View v, ClickResponseListener clickResponseListener) {
super(v);
//得到外部传递进来的点击事件处理对象,后面onclick中回调它
this.mClickResponseListener = clickResponseListener;
//.................................略
overflow = (ImageView) v.findViewById(R.id.card_share_overflow);
v.setOnClickListener(this);
overflow.setOnClickListener(this);
}
点击时,回调mClickResponseListener的方法
@Override
public void onClick(View v) {
if (v == overflow) {
mClickResponseListener.onOverflowClick(v, getAdapterPosition());
} else {
mClickResponseListener.onWholeClick(getAdapterPosition());
}
}
//ClickResponseListener 的定义
public interface ClickResponseListener {
void onWholeClick(int position);
void onOverflowClick(View v, int position);
}
这样就可以了 而且这样还可以把 itemView和itemView里面的子View的点击事件的分离。
它的字符串缓存是这样做的,每次异步任务加载完成之后都把字符串缓变成Json存到数据库,day是主键,每次取出的时候都用day去取出,然后刷新Adapter。
一般加载缓存数据是在 Fragment对用户可见的时候加载的,在oAttach和下拉刷新的时候去网络加载图片并缓存到数据库。
好暂时分析到这,主要想看看一般字符串缓存应该怎么做,好像还有一个叫ASimpleCache的缓存,回来去看看。大牛不愧是大牛,写的代码很耐读。