如何在ScrollView中添加2个ListView

时间:2016-10-03 12:03:15

标签: android android-layout listview android-fragments

这是我的代码,它只给我一个ListView,如果我将height ListView设置为wrap_contentmatch_parent。但是,如果我根据dp定义高度,它会开始向我展示ListView。但在这种情况下看起来不太好。

<ScrollView  xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:text="ListView1"
            android:gravity="center_vertical"
            android:paddingLeft="16dp"
            android:layout_marginTop="45dp"
            android:textColor="@color/white"
            android:textStyle="bold" />

        <ListView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/lv_upcoming"
            android:paddingLeft="4dp"
            android:paddingRight="4dp"
            android:divider="@null" />

        <View
            android:layout_width="fill_parent"
            android:layout_height="0.5dp"
            android:background="#ffffff" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:text="List Number 2"
            android:gravity="center_vertical"
            android:textColor="@color/white"
            android:fontFamily="sans-serif-condensed"
            android:textSize="18sp"
            android:id="@+id/tvPrevious"
            android:paddingLeft="16dp"
            android:paddingRight="16dp" />

       <ListView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/list_view_2"
            android:paddingLeft="4dp"
            android:paddingRight="4dp"
            android:divider="@null"/>

    </LinearLayout>
</ScrollView>

请指导我如何在布局中添加多个ListView

3 个答案:

答案 0 :(得分:1)

始终建议在单个布局文件中使用单个ListView。但是,是的,可能会出现一些需要适合两个列表的情况。因此,在这种情况下,我建议将两个列表合并到一个ArrayList中,以便可以在单个ListView中显示。

现在还有其他方法可以在布局中显示多个ListView。尝试使用NestedScrollView代替ScrollView

如果您考虑使用RecyclerView here's an implementation在同一RecyclerView中显示多个列表。您可以在code section中找到该项目,维基也有详细记录。

答案 1 :(得分:0)

将ListView放入FrameLayout并将layout_weight设置为1。

    <LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true"
    android:orientation="vertical">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:text="ListView1"
            android:gravity="center_vertical"
            android:paddingLeft="16dp"
            android:layout_marginTop="45dp"
            android:textStyle="bold"
            android:textColor="@color/white"/>

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1">

        <ListView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:id="@+id/lv_upcoming"
                android:paddingLeft="4dp"
                android:paddingRight="4dp"
                android:divider="@null"
                />
    </FrameLayout>

    <View
            android:layout_width="fill_parent"
            android:layout_height="0.5dp"
            android:background="#ffffff" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:text="List Number 2"
            android:gravity="center_vertical"
            android:fontFamily="sans-serif-condensed"
            android:textSize="18sp"
            android:id="@+id/tvPrevious"
            android:paddingLeft="16dp"
            android:textColor="@color/white"
            android:paddingRight="16dp" />

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1">

        <ListView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/list_view_2"
                android:paddingLeft="4dp"
                android:paddingRight="4dp"
                android:divider="@null"
            />
    </FrameLayout>

</LinearLayout>

答案 2 :(得分:0)

在scroll-view下使用list-view不是一个好习惯,如果你想使用它也是一个好习惯。然后你必须记住滚动视图下的列表视图不能正常工作,你必须以编程方式管理列表视图的高度。在列表视图上设置适配器时,您将遇到此问题。我在下面的链接中给出了相同的解决方案: -

Android ListView rows in ScrollView not fully displayed - clipped

public static void setListViewHeightBasedOnChildren(ListView listView) {
        ListAdapter listAdapter = listView.getAdapter(); 
        if (listAdapter == null) {
            // pre-condition
            return;
        }

        int totalHeight = 0;
        for (int i = 0; i < listAdapter.getCount(); i++) {
            View listItem = listAdapter.getView(i, null, listView);
            listItem.measure(0, 0);
            totalHeight += listItem.getMeasuredHeight();
        }

        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        listView.setLayoutParams(params);
    }