在我的应用程序中,我在列表视图中显示数据。它看起来如下。
列表视图中的每一行都是不同的(即,它们具有不同的视图结构)。但是每一行都由 1 到多个子视图组成(所有子视图都相同)。
问题:如果尝试从 xml 膨胀行,那么我需要 xml 有 1. 2 个子视图 2. 3 个子视图 3. 5 个子视图等等
如果我尝试动态构建行,那么我将无法利用持有者模式或 Listview 的视图可重用性。如果返回的视图中的子视图数量少于要求,我将最终构建子视图,或者在子视图超过要求的情况下删除。
简而言之,如何在不妨碍视图重用性或持有者模式的 listview 中拥有不同的视图?
编辑:
我扩展了 ArrayAdapter 并覆盖了 getView、getViewTypeCount、getItemViewType
@Override
public int getItemViewType(int position) {
return mListItems.get(position).getViewToBeRenderened().getViewId();
}
@Override
public int getViewTypeCount() {
return AppConstants.VwViewTypes.values().length;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final VWListItem listItem = mListItems.get(position);
if(listItem == null || listItem.getViewToBeRenderened() == null){
return convertView;
}
VWView renderingView = listItem.getViewToBeRenderened();
if(convertView == null ){
convertView = renderingView.buildView(mContext.appContext);
}
...
}
这种方法最初在只有 2-3 个不同的行视图时有效。对于这些行视图中的每一个,我都有一个不同的 xml 布局和相应的类来构建和膨胀。
但是现在这种视图的数量正在增长,我不想为每个额外的新行视图设置一个布局和类。相反,我想重用现有的布局和类并在它们之上构建。如果有更好的解决方案,那么我也愿意接受。