封装后的效果,比如写一个NewAdapter
@LayoutId(id = R.layout.item) public class NewsAdapter extends CommonAdapter<String>{ @DataSource List<String> list = Arrays.asList("我","是","大","帅","哥","哈","哈","哈","哈"); @BindView(id = R.id.imageView) ImageView imageView; @BindView(id = R.id.textView) TextView textView; @Override void onBind(String s) { textView.setText(s); } }
我们需要写的代码量已经是少的可怜了
做的封装点:
泛型:(首先我们约束了数据参数是List)然后可以去除掉getItemCount和每次bind中都要在List中取数据的操作
反射、注解:反射拿到所有Field,并且拿到所有Field的注解,为我们省去了FVB操作;拿到类上的注解,为什么省去了create的操作
使用了通用的ViewHolder,里面没有任何东西
全部代码(所谓难者不会,会者不难,泛型反射注解很简单,可以这些堆砌起来,并且我做了一定的性能优化,而且我没写注释,萌新读者可能就 不是很看得懂了)
CommonAdapter
package com.example.demo; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.example.demo.anno.BindView; import com.example.demo.anno.DataSource; import com.example.demo.anno.LayoutId; import java.lang.reflect.Field; import java.util.List; public abstract class CommonAdapter<T> extends RecyclerView.Adapter<CommonAdapter.ViewHolder> { class ViewHolder extends RecyclerView.ViewHolder { ViewHolder(View itemView) { super(itemView); } } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(getClass().getAnnotation(LayoutId.class).id(), parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(CommonAdapter.ViewHolder holder, int position) { View view = holder.itemView; int len = bindViews.length; for (int i = 0; i < len; i ++) { BindView bindView = bindViews[i]