我有一个项目 ListView ,其中的项目有一个子 ListView 。我的问题是子 ListView 不会展开以显示所有项目。
父布局
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="0px"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/site_wallet_header"
style="@style/Home.ListHeader" />
<ListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/site_wallet_list" />
</LinearLayout>
子布局
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@style/ListItem"
android:layout_gravity="center_vertical"
android:gravity="center">
<ImageView
android:id="@+id/bank_icon"
android:layout_height="wrap_content"
android:layout_width="0dip"
android:layout_weight="1" />
<TextView
android:id="@+id/bank_name"
android:layout_height="wrap_content"
android:layout_width="0dip"
android:layout_weight="4"
style="@style/ListItem.Text"/>
</LinearLayout>
父集合ArrayAdapter
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(resourceId, null);
}
AccountSummary account = accounts.get(position);
if (account != null)
{
TextView header = (TextView) v.findViewById(R.id.site_wallet_header);
header.setText(account.Name);
if (account.Banks.length == 0) {
//LinearLayout noBanks = (LinearLayout) context.getLayoutInflater().inflate(R.layout.no_banks, null);
} else {
ListView banksList = (ListView) v.findViewById(R.id.site_wallet_list);
//banksList.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT));
banksList.clearChoices();
banksList.setAdapter(new BankSummaryAdapter(context, R.layout.list_item_bank, account.Banks));
}
}
return v;
}
子集合ArrayAdapter
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(resourceId, null);
}
BankSummary bank = items.get(position);
if (bank != null)
{
TextView nameText = (TextView) v.findViewById(R.id.bank_name);
ImageView iconImage = (ImageView) v.findViewById(R.id.bank_icon);
nameText.setText(bank.DisplayName);
Resources res = context.getResources();
switch (bank.BankCode)
{
case 'V':
iconImage.setImageDrawable(res.getDrawable(R.drawable.ic_visa));
break;
case 'M':
iconImage.setImageDrawable(res.getDrawable(R.drawable.ic_mastercard));
break;
case 'D':
iconImage.setImageDrawable(res.getDrawable(R.drawable.ic_discover));
break;
case 'A':
iconImage.setImageDrawable(res.getDrawable(R.drawable.ic_american_express));
break;
default:
iconImage.setImageDrawable(res.getDrawable(R.drawable.ic_echeck));
break;
}
}
return v;
}
这就是它正在做的事情。
我的目标是动态加载这些 header 列表。该屏幕将是可滚动的,子列表始终显示每个项目。然而,无论我如何尝试,我似乎都无法让子列表完全扩展。我真的想避免在代码中构建整个东西。
最佳答案
我相信使用ExpandableListView会给您带来更好的运气。和一个ExpandableListAdapter而不是这种复杂的布局。
然后,您可以通过迭代每个组并调用 expandGroup(int groupPos)
关于Android - ListView 中的 ListView 不会展开以显示所有项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6255687/