1

コメントボックスのようなものxml-layoutを含むファイルをすでに作成しています。メソッドView内で動的レイアウト(コメントボックス)を複数回作成したい。メソッドgetView()内で動的に作成するにはどうすればよいですか?getView()

ここでgetview()メソッド内で、特定の複数回動的に生成するためのコードを使用Viewしましたが、機能しません。提案をお願いします。

私のアダプターコードのリンクは次のとおりです。

http://pastebin.com/aAYdPbn9

4

1 に答える 1

2

3 つのアプローチがあります。コメントで説明したように、質問のタイトルは誤解を招くので、これは私が推測するものです:

  • 表示したいカードのリストがある
  • 各カードにはコメントのリストがある場合があります

したがって、根本的な問題は、1 次元の UI コンポーネント(この場合は ListView)を使用して表示したい2 次元のデータ構造があることです。

次の方法で問題を解決できます。

  1. カードが親要素で、コメントが子要素である ExpandableListView を使用します。例については [1] を参照してください。

  2. データ階層をフラット化します。したがって、カードが何らかの形でコメントの「ヘッダー」または「セパレーター」として扱われるアイテムのリストしかありません。[2] を上書きする必要があります。その場合、アダプターは 2 つの異なるビューを返すことができます。メソッドでは、次のgetView()ようなことを行う必要があります。

    if(list.get(position) instanceOf Card) return getCardView(...); else if(list.get(position) instanceOf Comment) return getCommentView(...);

  3. カード ビュー内のコンテナーにコメントを動的にレンダリングします。したがって、カード ビューのレイアウト ファイルでは、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()

于 2014-12-02T12:43:48.833 に答える