偶然看到 Ribot 的 Easy Adapter 中使用继承和注解 ViewHolder 的方式来实现通用适配器,感觉很方便。
在参( chao )考( xi )这个项目的基础上扩展了通过回调 holder 给 item 设置各种 listener 的方法,感觉自己用着还行,特来斗胆推荐一发,求指点 /pr/star > <
用法和 Easy Adapter 相同,继承 CommonHolder 然后注解 LayoutId 和 ViewId 并实现 bindData(T t)
方法。例如:
@LayoutId(R.layout.item_person)
public class PersonHolder extends CommonHolder<Person> {
@ViewId(R.id.name) TextView name;
@ViewId(R.id.email) TextView email;
public PersonHolder(View itemView) {
super(itemView);
}
@Override public void bindData(Person person) {
name.setText(person.name);
email.setText(person.email);
}
}
然后直接 set 给 ListView / RecyclerView 就好了
SimpleListAdapter<Person, PersonHolder> listAdapter = new SimpleListAdapter<>(this, PersonHolder.class);
mListView.setAdapter(listAdapter);
设置监听器不用像 EasyAdapter 一样写死在 ViewHolder 中了,可以直接调用 adapter 设置:
recyclerAdapter.setOnBindListener((position, person, holder) -> {
// holder 用于直接对 view 配置监听器
holder.name.setOnClickListener((v) -> toast(person.name));
holder.email.setOnClickListener((v) -> toast(person.email));
});