我扩展了一个ArrayAdapter,它在一个ListView
中一起显示来自两个独立类的项目。我将ArrayList<ClassA> classAList
和ArrayList<ClassB> classBList
传递给构造函数和更新方法,并重写了支持函数以不同方式显示这两个类。这样做,似乎有些不雅。
是否有更原生的方法将多个类组合成一个ListView?
答案 0 :(得分:2)
它不优雅,因为ListView
并非旨在显示复杂的数据和布局,您的方法几乎可以做到。
如果要以优雅的方式显示多个单元格模板,则应使用RecyclerView。
它与ListView
非常相似,您需要实现一个适配器作为数据源和单元的View工厂。具体来说,请查看getItemViewType,createViewHolder和bindViewHolder。
答案 1 :(得分:0)
是的,你可以用很少的脏方式来做。
第一个选项是将这些类包装到一个类中,该类将保存对 ClassA 和 ClassB 的引用。之后,您可以像使用普通对象一样使用它。
第二个选项是同时使用两个列表,但您需要以不同的方式使用适配器。
首先:
@Override
public int getCount() {
return classAList.size() + classBList.size();
}
第二
@Override
public Object getItem(int position) {
if(position >= classAList.size()){
return classBList.get(position - classAList.size());
}
return classAList.get(position);
}
如果您对两个列表使用相同的视图,则所有其他视图都相同,否则您应该覆盖更多内容:
至少为
getViewTypeCount()和 getItemViewType()