0
我知道將兩個ListViews放在ScrollView中並不是最佳做法。然而,這是我能想到的最好的解決方案:ScrollView中的兩個ListViews
我想要兩個列表(第一個包含1-5個項目,最後一個包含最多20個項目)在可滾動的下方查看,每個都有自己的標題。 ListViews不應該自己滾動,他們應該改變高度來包裝他們的內容。可滾動部分將由ScrollView處理。
因爲ListView控件不支持這個本身我使用下面的代碼:
public static void setListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
// pre-condition
return;
}
int totalHeight = 0;
int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.AT_MOST);
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(desiredWidth, MeasureSpec.UNSPECIFIED);
totalHeight += listItem.getMeasuredHeight();
Log.d("DEBUG", "TotalHeight:" + totalHeight);
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listAdapter.getCount() * listView.getDividerHeight());
listView.setLayoutParams(params);
listView.requestLayout();
}
然而,這使得列表視圖約10倍大,他們應該是。如果我搜索我遇到的問題,我總是會找到上述解決方案,但對我來說,這似乎並不奏效。
有沒有辦法解決我的代碼或有沒有更好的方法去呢?
XML:
<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"
tools:context="com.miscoriadev.svvirgoapp.fragments.frag_activiteiten"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingTop="@dimen/activity_vertical_margin">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tv_acti_komende_activiteiten"
android:textSize="32sp"
android:text="Komende activiteiten"
android:textColor="@color/TextColorDark"
android:gravity="center"/>
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/tv_acti_komende_activiteiten"
android:id="@+id/lv_komende_activiteiten">
</ListView>
<TextView
android:paddingTop="@dimen/activity_vertical_margin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="32sp"
android:text="Afgelopen activiteiten"
android:textColor="@color/TextColorDark"
android:gravity="center"
android:layout_marginLeft="@dimen/activity_horizontal_margin"
android:id="@+id/tv_acti_afgelopen_activiteiten"
android:layout_below="@id/lv_komende_activiteiten"/>
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/tv_acti_afgelopen_activiteiten"
android:id="@+id/lv_afgelopen_activiteiten">
</ListView>
</RelativeLayout>
您需要兩個列表同時滾動並顯示在同一屏幕上嗎?如果是這樣,我會推薦使用[GridView](https://developer.android.com/guide/topics/ui/layout/gridview.html)和2列。如果沒有,我會建議使用[ViewPager](https://developer.android.com/training/animation/screen-slide.html)與[TabLayout](https://developer.android.com/reference/android /support/design/widget/TabLayout.html)。這裏是一個教程如何做到這一點:https://guides.codepath.com/android/google-play-style-tabs-using-tablayout – klauskpm
不,我只是想讓他們在彼此之下,並有兩個列表一個可滾動的框架 –
我相信如果您使用水平的「ListView」而不是垂直的ListView,則會更方便。我甚至建議使用[RecyclerView](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html),可以是水平或垂直。 – MohanadMohie