我无法显示两个不能单独滚动的连续全尺寸(高度)ListViews
,只能滚动根元素。
这件事整天困扰着我,因为我有各种输出(两个可滚动列表视图,半剪切滚动视图等)但没有成功。阅读之前的帖子here,here和here。
为您提供当前布局xml,可能是什么解决方案?删除ScrollView
,将LinearLayout
更改为RelativeLayout
,设置layout_weight
?
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true"
>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<xxx.xxx.xxx.xxx.MultiSpinner
android:id="@+id/ad_list_filter"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.5"
/>
<xxx.xxx.xxx.xxx.MultiSpinner
android:id="@+id/ad_list_sort"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.5"
/>
</LinearLayout>
<ListView
android:id="@+id/adListInterests"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:divider="@null"
android:dividerHeight="5dp"
>
</ListView>
<ImageView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/ad_list_seperator"
/>
<ListView
android:id="@+id/adListNoninterests"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:divider="@null"
android:dividerHeight="5dp"
>
</ListView>
</LinearLayout>
</ScrollView>
提前致谢!
修改
在两个可滚动列表中删除建议的ScrollView
结果后。根据评论,我将尝试使用提供的插件来实现它,但我仍然希望找到基于仅修改布局代码的解决方案。感谢您的时间!
图像:
布局:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<xxx.xxx.xxx.xxx.MultiSpinner
android:id="@+id/ad_list_filter"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.5"
/>
<xxx.xxx.xxx.xxx.MultiSpinner
android:id="@+id/ad_list_sort"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.5"
/>
</LinearLayout>
<ListView
android:id="@+id/adListInterests"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:divider="@null"
android:dividerHeight="5dp"
>
</ListView>
<ImageView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/ad_list_seperator"
/>
<ListView
android:id="@+id/adListNoninterests"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:divider="@null"
android:dividerHeight="5dp"
>
</ListView>
</LinearLayout>
答案 0 :(得分:1)
您的层次结构是正确的,只需更改您的ListView
代码:
android:layout_height="wrap_content" <!-- cahnge this line -->
android:layout_weight="xxx" <!-- remove this line -->
然而,这是一种糟糕,低效且占用内存的解决方案。通过执行此操作,您将强制屏幕上的所有视图保留在内存中。一个更好的解决方案是只使用一个列表,其中自定义适配器处理多个数据集/视图类型,以及包含微调器的标题视图。
目前最简单,最快捷,最正确的解决方案是使用cwac-merge库,您可以使用多个ListView
的数据加载一个ListAdapter
。一旦了解了它的工作原理并使用它,就可以改变布局:
<强> list_header.xml 强>
在将合并适配器分配给列表视图之前,必须以编程方式设置标题视图。您可以扩充此布局XML。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<xxx.xxx.xxx.xxx.MultiSpinner.../>
<xxx.xxx.xxx.xxx.MultiSpinner.../>
</LinearLayout>
<强> list_main.xml 强>
这是您的活动或片段的主要布局。它将只包含列表,可以处理您需要的所有内容。
<?xml version="1.0" encoding="utf-8"?>
<ListView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/adListInterests"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:divider="@null"
android:dividerHeight="5dp"/>
如何使用cwac-merge
您需要在Gradle中导入它(适用于Android Studio)
repositories {
maven {
url "https://repo.commonsware.com.s3.amazonaws.com"
}
}
dependencies {
compile 'com.commonsware.cwac:merge:1.1.+'
}
或下载几个.jar
s(用于Eclipse)
代码的外观如下:
View header = LayoutInflater.from(context).inflate(R.layout.list_header, null, false);
// get references for your Spinners here...
myListView.addHeader(header, null, false);
// setup your two adapters as you are doing now
MergeAdapter adapter = new MergeAdapter();
adapter.addAdapter(firstAdapter); // the adapter that you previously used for the first list
adapter.addAdapter(secondAdapter); // the adapter that you previously used for the second list
myListView.setAdapter(adapter);
答案 1 :(得分:0)
关于有两个单独的ListView
的整个想法是错误的 - 而不是我构建了一个ListView
并在第一个结束后添加了自定义行作为以下列表的标题。
我使用的概念是here。