私のアプリでは、リスト ビューでデータを表示します。以下のようになります。
リスト ビューの各行は異なります (つまり、ビュー構造が異なります)。ただし、すべての行は1つから多くのサブビューで構成されています(すべてのサブビューは同じです)。
問題: xml から行を膨らませようとする場合、1. 2 つのサブビュー 2. 3 つのサブビュー 3. 5 つのサブビューなどの xml が必要です。
行を動的に構築しようとすると、ホルダー パターンや 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 レイアウトと、ビルドおよびインフレートする対応するクラスがありました。
しかし、現在、そのようなビューの数が増えているため、追加の新しい行ビューごとにレイアウトとクラスを作成したくありません。代わりに、既存のレイアウトとクラスを再利用して、それらの上に構築したいと考えています。より良い解決策があれば、それも受け入れます。