Android - ListView 中的 ListView 不会展开以显示所有项目

标签 android android-layout android-listview android-arrayadapter

我有一个项目 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;
}

这就是它正在做的事情。

frustration

我的目标是动态加载这些 header 列表。该屏幕将是可滚动的,子列表始终显示每个项目。然而,无论我如何尝试,我似乎都无法让子列表完全扩展。我真的想避免在代码中构建整个东西。

最佳答案

我相信使用ExpandableListView会给您带来更好的运气。和一个ExpandableListAdapter而不是这种复杂的布局。

然后,您可以通过迭代每个组并调用 expandGroup(int groupPos)

来展开每个组

关于Android - ListView 中的 ListView 不会展开以显示所有项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6255687/

相关文章:

android - cordova "release"在 SSL 方面的行为与 "debug"不同

java - "Type of the parameter must be a class annotated with @Entity"在 Room 中创建 Generic DAO 接口(interface)时

java - 我在运行前初始化 TextView,因为 View 尚未设置

android - 如何在 ListView 中添加快速滚动和字母部分索引

android - 向 float 操作按钮添加菜单选项

android - ListView 在 2.x 上改变颜色

Android - 隐藏所有显示的 Toast 消息

android - 无法使用回收器 View 滚动数据

android - ListView 中 TextView 的文本未被省略

java - ListAdapter将数组类型改为int后拒绝申请