ScrollView中的Listview不显示所有项目

时间:2015-10-15 06:57:15

标签: android android-listview android-scrollview

我的布局有两个ListView,它们都在scrollview中,因为内容可能超出设备的高度。这是布局:

<RelativeLayout 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"
    tools:context="com.galleri5.android.activities.ImageActivity">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:elevation="4dp"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="#FAC80A">

        <RelativeLayout
            android:id="@+id/relativeLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Image"
                android:textColor="#000000"
                android:textSize="17sp"
                android:layout_centerVertical="true"
                android:id="@+id/textView80" />

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/imageView134"
                android:src="@drawable/gallery_page_ic_notifications"
                android:layout_alignParentEnd="true"
                android:layout_marginRight="30dp"
                android:layout_centerVertical="true" />

        </RelativeLayout>

    </android.support.v7.widget.Toolbar>

    <ScrollView
        android:id="@+id/scrollView2"
        android:layout_below="@+id/toolbar"
        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:background="@drawable/user_profile_bg"
            android:orientation="vertical">

            <ImageView
                android:id="@+id/imageView102"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginBottom="25dp"
                android:layout_marginTop="10dp"
                android:adjustViewBounds="true" />

            <ImageView
                android:id="@+id/imageView103"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginBottom="25dp"
                android:src="@drawable/user_profile_activity_1_shape_thin_line_separator" />

            <TextView
                android:id="@+id/textView38"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="10dp"
                android:layout_marginLeft="30dp"
                android:layout_marginRight="30dp"
                android:alpha="0.8"
                android:inputType="textMultiLine"
                android:textColor="#FFFFFF" />

            <TextView
                android:id="@+id/textView39"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="25dp"
                android:layout_marginLeft="30dp"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:textColor="#707070" />

            <ImageView
                android:id="@+id/imageView104"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginBottom="25dp"
                android:src="@drawable/user_profile_activity_1_shape_thin_line_separator" />

            <LinearLayout
                android:id="@+id/linearLayout3"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="20dp"
                android:layout_marginLeft="30dp"
                android:layout_marginRight="30dp"
                android:orientation="horizontal">

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">

                    <ImageView
                        android:id="@+id/imageView107"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_centerVertical="true"
                        android:paddingRight="5dp" />

                    <LinearLayout
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_centerVertical="true"
                        android:layout_toRightOf="@+id/imageView107"
                        android:orientation="vertical"
                        android:paddingLeft="5dp">

                        <TextView
                            android:id="@+id/textView45"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:alpha="0.8"
                            android:paddingBottom="2dp"
                            android:textColor="#FFFFFF" />

                        <TextView
                            android:id="@+id/textView46"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:paddingTop="2dp"
                            android:textAppearance="?android:attr/textAppearanceSmall"
                            android:textColor="#707070"
                            android:textSize="12sp" />
                    </LinearLayout>

                    <ImageView
                        android:id="@+id/imageView108"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentEnd="true"
                        android:layout_centerVertical="true"
                        android:src="@drawable/image_page_button_bookmark" />
                </RelativeLayout>
            </LinearLayout>

            <ImageView
                android:id="@+id/imageView109"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginBottom="10dp"
                android:src="@drawable/user_profile_activity_1_shape_thin_line_separator" />

            <android.support.v7.widget.CardView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="35dp"
                android:layout_marginLeft="30dp"
                android:layout_marginRight="30dp">

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

                    <TextView
                        android:id="@+id/textView47"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="25dp"
                        android:layout_marginTop="15dp"
                        android:text="This Image is Part Of..."
                        android:textColor="#707070" />

                    <ImageView
                        android:id="@+id/imageView110"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_horizontal"
                        android:layout_marginBottom="20dp"
                        android:layout_marginTop="10dp"
                        android:src="@drawable/user_profile_activity_1_shape_thin_line_separator" />

                    <ListView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:id="@+id/listView2" />

                    <TextView
                        android:id="@+id/textView57"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginBottom="20dp"
                        android:layout_marginLeft="30dp"
                        android:text="See All Galleries"
                        android:textColor="#707070" />

                </LinearLayout>


            </android.support.v7.widget.CardView>

            <ImageView
                android:id="@+id/imageView125"
                android:layout_width="305dp"
                android:layout_height="wrap_content"
                android:layout_gravity="right"
                android:layout_marginBottom="20dp"
                android:src="@drawable/image_page_belongs_to_shape_line_separator_1" />

            <ListView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/listView6" />

            <EditText
                android:id="@+id/editText6"
                android:layout_width="300dp"
                android:layout_height="wrap_content"
                android:layout_marginLeft="40dp"
                android:alpha="0.8"
                android:inputType="text"
                android:elegantTextHeight="true"
                android:enabled="true"
                android:hint="Comment"
                android:textCursorDrawable="@null"
                android:textColor="#FFFFFF"
                android:textColorHint="#FFFFFF"
                android:layout_marginTop="10dp"
                android:backgroundTint="#fac80a" />

        </LinearLayout>
    </ScrollView>

</RelativeLayout>

这两个listviews有id listView2和listView6。我正确地为列表视图设置了适配器。我从后端获取数据。对于这两个列表视图,我从后端获得两个项目,但实际上它只显示每个listView中的一个项目。我也尝试使用notifyDataSetChanged()将项添加到第二个listView,但这也不起作用。我只得到一件物品。可能的原因是什么以及如何解决?

4 个答案:

答案 0 :(得分:1)

这是我所做的,以防其他人遇到类似的问题:

注意:此解决方案效率很低。我正在使用它,因为我的listView中最多有2个项目。如果你有一个包含大量项目的listView,我不推荐给别人。

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

            int totalHeight = listView.getPaddingTop() + listView.getPaddingBottom();
            for (int i = 0; i < listAdapter.getCount(); i++) {
                 View listItem = listAdapter.getView(i, null, listView);
                 if (listItem instanceof ViewGroup) {
                    listItem.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
                 }
                 listItem.measure(0, 0);
                 totalHeight += listItem.getMeasuredHeight();
            }

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

在设置适配器后,我在两个listViews上调用了此函数。 希望它有所帮助。

答案 1 :(得分:1)

正如我在评论中所说,而不是在scrollview中使用listview使用recyclerview。我刚刚创建了一个demo project,让您了解具有多种布局的recyclerview。导入项目并查看它。

您可以将当前布局裁剪为多个布局,并根据需要对其进行充气,并在recyclerview中实施。

答案 2 :(得分:1)

另一种可能性是使用一个ListView 2 - .. 不同的适配器多个不同<强>视图即可。对于ListView,有https://github.com/commonsguy/cwac-merge。在一个大适配器中添加许多适配器和视图,您可以将其添加到1个ListView。

页面上的文字:

只需创建一个MergeAdapter并调用addAdapter(),addView()或addViews()(后者接受List),然后将适配器附加到ListView。

摇篮:

repositories {
    maven {
        url "https://s3.amazonaws.com/repo.commonsware.com"
    }
}

dependencies {
    compile 'com.commonsware.cwac:merge:1.1.+'
}

答案 3 :(得分:0)

不建议在scrollview中包含listview。虽然列表显示了所有项目,但滚动体验到列表并不好。您应该重新构建布局以避免这种情况。

希望它可以帮到你!!