コメントボックスのようなものxml-layout
を含むファイルをすでに作成しています。メソッドView
内で動的レイアウト(コメントボックス)を複数回作成したい。メソッドgetView()
内で動的に作成するにはどうすればよいですか?getView()
ここでgetview()
メソッド内で、特定の複数回動的に生成するためのコードを使用View
しましたが、機能しません。提案をお願いします。
私のアダプターコードのリンクは次のとおりです。
コメントボックスのようなものxml-layout
を含むファイルをすでに作成しています。メソッドView
内で動的レイアウト(コメントボックス)を複数回作成したい。メソッドgetView()
内で動的に作成するにはどうすればよいですか?getView()
ここでgetview()
メソッド内で、特定の複数回動的に生成するためのコードを使用View
しましたが、機能しません。提案をお願いします。
私のアダプターコードのリンクは次のとおりです。
3 つのアプローチがあります。コメントで説明したように、質問のタイトルは誤解を招くので、これは私が推測するものです:
したがって、根本的な問題は、1 次元の UI コンポーネント(この場合は ListView)を使用して表示したい2 次元のデータ構造があることです。
次の方法で問題を解決できます。
カードが親要素で、コメントが子要素である ExpandableListView を使用します。例については [1] を参照してください。
データ階層をフラット化します。したがって、カードが何らかの形でコメントの「ヘッダー」または「セパレーター」として扱われるアイテムのリストしかありません。[2] を上書きする必要があります。その場合、アダプターは 2 つの異なるビューを返すことができます。メソッドでは、次のgetView()
ようなことを行う必要があります。
if(list.get(position) instanceOf Card)
return getCardView(...);
else if(list.get(position) instanceOf Comment)
return getCommentView(...);
カード ビュー内のコンテナーにコメントを動的にレンダリングします。したがって、カード ビューのレイアウト ファイルでは、LinearLayout などの ViewGroup を使用し、「llComments」などの一意の ID を指定します。コメント用に別のレイアウト ファイルを用意します。次に、現在のコードでこのファイルを膨張させ、返されたビューをコンテナー (llComments) に追加するだけです。これがあなたが探しているソリューションだと思います。したがって、コードで次のようにします。
View commentConvertView = inflater.inflate(R.layout.list_item_comment, ...);
ViewGroup comments = (ViewGroup) convertView.findViewById(R.id.llComments);
comments.removeAllView;
for(list.get(position).getComments()){
//bind the data to commentConvertView
comments.add(commentConvertView);
}
[1] http://www.vogella.com/tutorials/AndroidListView/article.html#expandablelistview_concept [2] http://developer.android.com/reference/android/widget/BaseAdapter.html#getViewTypeCount()