Android ArrayAdapter getItem()类型不兼容问题排查求助
问题分析与解决方案
嘿,我一眼就发现问题所在啦!这是个典型的泛型类型不匹配错误,咱们一步步来解决:
核心问题
你的TEventAdapter继承的是ArrayAdapter<Testowa>,泛型指定的是Testowa类型,但你在getView方法里却试图把getItem(position)返回的Testowa对象赋值给WeekViewEvent类型的变量——这两种类型完全不兼容,Android Studio自然会报错啦!
修正步骤
- 修正Adapter的泛型类型
把Adapter继承的泛型从Testowa改成你实际要适配的WeekViewEvent,同时构造方法里的集合参数类型也要对应修改。 - 统一参数语义(可选但推荐)
把构造方法里的参数名改成更贴合业务的名字,比如weekViewEvents,让代码可读性更高。 - 确认Getter方法存在
确保你的WeekViewEvent类里确实有getName()和getLocation()这两个公共的getter方法(你提到已经实现了setter/getter,这里只是再确认下)。
修正后的完整Adapter代码
public class TEventAdapter extends ArrayAdapter<WeekViewEvent> { public TEventAdapter(Context context, ArrayList<WeekViewEvent> weekViewEvents) { super(context, 0, weekViewEvents); } @NonNull @Override public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { View pojedynczyItemView = convertView; if(pojedynczyItemView == null){ pojedynczyItemView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false); } // 现在getItem返回的就是WeekViewEvent类型,类型匹配了! WeekViewEvent wvevent = getItem(position); TextView tv1 = pojedynczyItemView.findViewById(R.id.tv_lv1); tv1.setText(wvevent.getName()); TextView tv2 = pojedynczyItemView.findViewById(R.id.tv_lv2); tv2.setText(wvevent.getLocation()); return pojedynczyItemView; } }
额外提醒
以后自定义ArrayAdapter时,一定要保证泛型类型和你要绑定的数据模型完全一致,这样不仅能避免类型转换错误,还能让代码更安全、可读性更强~
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

