【发布时间】:2018-06-23 07:47:20
【问题描述】:
我正在尝试根据官方 AndroidAnnotations 网站的以下教程在我的 Activity 中实现简单的回收器视图:adapter link
但是,当我完成所有步骤并尝试实现 @ItemClick 方法时,它给了我以下错误:
Error:(84, 36) 错误:不兼容的类型:RecyclerView 无法转换为 AdapterView
在我生成的活动代码下突出显示以下代码:
...((AdapterView<?> ) this.miestnostiList).setOnItemClickListener(new OnItemClickListener() {...
根据指南,我创建了以下基类:
public abstract class RecyclerViewAdapterBase<T, V extends View> extends RecyclerView.Adapter<ViewWrapper<V>> {
protected List<T> items = new ArrayList<T>();
@Override
public int getItemCount() {
return items.size();
}
@Override
public final ViewWrapper<V> onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewWrapper<V>(onCreateItemView(parent, viewType));
}
protected abstract V onCreateItemView(ViewGroup parent, int viewType);
}
public class ViewWrapper<V extends View> extends RecyclerView.ViewHolder {
private V view;
public ViewWrapper(V itemView) {
super(itemView);
view = itemView;
}
public V getView() {
return view;
}
}
然后我创建了我的行视图项如下:
@EViewGroup(R.layout.activity_list_miestnosti_row)
public class MiestnostItemView extends LinearLayout{
@ViewById(R.id.txt_miestnost_row_nazov)
TextView nazov;
public MiestnostItemView(Context context) {
super(context);
}
public void bind(Miestnost miestnost){
nazov.setText(miestnost.getNazov());
}
}
最后是我的适配器类:
public class ListMiestnostiAdapter extends RecyclerViewAdapterBase<Miestnost, MiestnostItemView> {
@RootContext
Context context;
@Override
protected MiestnostItemView onCreateItemView(ViewGroup parent, int viewType) {
return MiestnostItemView_.build(context);
}
@Override
public void onBindViewHolder(ViewWrapper<MiestnostItemView> holder, int position) {
MiestnostItemView view = holder.getView();
Miestnost miestnost = items.get(position);
view.bind(miestnost);
}
}
在我的活动下,我在@AfterViews 部分初始化我的适配器:
@ViewById
RecyclerView miestnostiList;
ListMiestnostiAdapter adapter;
@AfterViews
void bindAdapter() {
GetData();//fetch data
adapter = new ListMiestnostiAdapter();
adapter.addData(miestnosti);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
miestnostiList.setLayoutManager(layoutManager);
miestnostiList.setItemAnimator(new DefaultItemAnimator());
miestnostiList.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));
miestnostiList.setAdapter(adapter);
}
这是我的@ItemClick 方法:
@ItemClick
void miestnostiListItemClicked(Miestnost miestnost){
Log.i("", "iteClicked: ");
}
我在这里缺少什么?
【问题讨论】:
-
编译时出现这个错误?
标签: java android android-annotations onitemclick