ネストされたリストビューを持つことは可能/お勧めですか?
つまり、別のリストビューの行に含まれているリストビューですか?
例としては、私のメインリストにブログの投稿が表示され、各行に、各投稿のコメントの別のリストビューがあります(これは折りたたみ可能です)。
今日も同じ問題があったので、これを解決するために私がやったことは次のとおりです。
CustomAdapterを含むListViewがあり、customAdapterのgetViewには次のようなものがあります。
LinearLayout list = (LinearLayout) myView.findViewById(R.id.list_musics);
list.removeAllViews();
for (Music music : albums.get(position).musics) {
View line = li.inflate(R.layout.inside_row, null);
/* nested list's stuff */
list.addView(line);
}
したがって、再開すると、ListViewにネストすることはできませんが、LinearLayoutを使用して行内にリストを作成し、コードを入力することができます。
ExpandableListView を探していますか?もちろん、これは2つのレベルのリストに限定されています(ただし、ニーズに合わせて機能すると思われます)。
これ 探しているもののように聞こえますか?そうでない場合、またはこれが機能しない場合は、2つのリストビューを用意することをお勧めします。たとえば、ブログ投稿と2番目のコメントの1つです。ブログ投稿アイテムに対するアクションにより、2番目のビューに移動します。 、関連するコメントが入力されています。
あなたはこのようにそれを行うことができます:
親リストビュー行xmlレイアウト内に次のテーブルレイアウトを追加します
<TableLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:id="@+id/table_show"
Android:background="#beb4b4">
</TableLayout>
次に、reply_row.xmlという名前の子リストのレイアウトを作成する必要があります
<?xml version="1.0" encoding="utf-8"?>
<TableRow Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginTop="3dp"
xmlns:Android="http://schemas.Android.com/apk/res/Android">
<TextView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:id="@+id/tv_reply_row"
Android:textColor="#000"/>
</TableRow>
親リストビューアダプターのgetviewメソッドに次のコードを追加します。
TableLayout replyContainer = (TableLayout)
// vi is your parent listview inflated view
vi.findViewById(R.id.table_show);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//child listview contents list
String [] replys = {"a","b","c","d"};
for (int i=0;i<replys.length;i++)
{
final View comments = inflater.inflate(R.layout.reply_row, null);
TextView reply_row = (TextView) comments.findViewById(R.id.tv_reply_row) ;
reply_row.setText(replys[i]);
//for changing your tablelayout parameters
TableLayout.LayoutParams tableRowParams=new TableLayout.LayoutParams
(TableLayout.LayoutParams.FILL_PARENT,TableLayout.LayoutParams.WRAP_CONTENT);
int leftMargin=3;
int topMargin=2;
int rightMargin=3;
int bottomMargin=2;
tableRowParams.setMargins(leftMargin, topMargin, rightMargin, bottomMargin);
comments.setLayoutParams(tableRowParams);
TableRow tr = (TableRow) comments;
replyContainer.addView(tr);
}
ネストするのではなく、1つのリストビューを使用することをお勧めします。 ListViewのネストは非効率的な方法です。 ListViewがスムーズにスクロールせず、より多くのメモリを消費する場合があります。
データ構造を編成して、ネストされたデータを1つのリストビューに表示できます。または、このプロジェクト PreOrderTreeAdapter を使用できます。 ListViewまたはRecyclerViewでネストされたデータを表示すると便利です。 ListViewまたはRecyclerViewを折りたたみ可能にするために使用できます。アダプターに通知するのではなく、データを提供する方法を変更するだけです。