ScrollView distrubing ListView inside of LinearLayout
Solution 1
There is a conflict between the ScrollView
and the ListView
. In general, you cannot put a ListView
inside a ScrollView
. ListView
already understands about scrolling and will scroll itself. ListView
needs to know how much vertical space on the screen it should use, so that it can control the scrolling and display of its children. It is difficult to understand how the layout that you've posted should behave.
In any case, the only way to put a ListView
inside a ScrollView
is to tell the ListView
exactly how much vertical space it should use. You cannot use match_parent
or wrap_content
for layout_height
, you need to fix the vertical size. This helps the ScrollView
to determine how much vertical space each of its children takes up, and then the ScrollView
can do the right thing.
Try setting android:layout_height="80dp"
on all of your ListView
s to see how this behaves.
EDIT: After looking at the layout again, I have another suggestion
After looking at the layout again, I am assuming that you want to have only one of the ListView
s visible at a given time (the others would all be GONE). In this case, you might try the following:
- Remove the surrounding
ScrollView
- Set
android:layout_weight="1"
andandroid:layout_height="1px"
on allListView
s
This basically tells the layout manager that the ListView
should be given all available space on the screen (ie: whatever is left over after the other View
s are laid out). This will make the ListView
expand to take up all available space on the screen, while keeping all the other View
s on screen and the entire screen will not scroll, only the ListView
. This may be a better way to give you what you want.
You might also consider using ExpandableListView
, which seems to be what you are trying to recreate here.
Solution 2
You can not have directly or indirectly a ListView
inside a ScrollView
. That's because they will figth to manage touch events. You have to re-think about your UI design
Solution 3
Go through the above link it might be helpful. OR follow below link as well.
http://www.androidhub4you.com/2012/12/listview-into-scrollview-in-android.html
Solution 4
Do one thing try giving hard coded height to your listview for example android:layou_height="100dp" and it will work but this is not recommended.
Comments
-
Ahmed Nawaz almost 2 years
I have LinearLayout whcih contains Buttons and ListViews. After getting many buttons and I decide to put that LinearLayout into ScrollView but after putting ScrollView my ListViews are showing only one Item.
Following is the code before ScrollView
<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:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".WorkplaceObservationActivity" > <Button android:id="@+id/btn_reportType" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Report Type" /> <ListView android:id="@+id/lv_reportType" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="gone" > </ListView> <Button android:id="@+id/btn_defineJob" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Define Job" /> <ListView android:id="@+id/lv_Jobs" android:layout_width="match_parent" android:layout_height="wrap_content" android:checkMark="?android:attr/listChoiceIndicatorMultiple" android:visibility="gone" > </ListView> <Button android:id="@+id/btn_timeLocation" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Time and Location" /> <LinearLayout android:id="@+id/ll_timeLocation" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:visibility="gone" > <Button android:id="@+id/btn_setCurrentTime" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" android:text="Use current time and date" /> <Button android:id="@+id/btn_setCustomTime" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" android:text="Enter custom time" /> <Button android:id="@+id/btn_setCustomDate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" android:text="Enter custom date" /> <TextView android:id="@+id/tv_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="Time and Date: " android:textAppearance="?android:attr/textAppearanceMedium" android:visibility="gone" /> </LinearLayout> <Button android:id="@+id/btn_ReportDetails" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Report Details" /> <LinearLayout android:id="@+id/ll_ReportDetails" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:visibility="gone" > <Button android:id="@+id/btn_CaptureVideo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="Capture Video" /> <ListView android:id="@+id/lv_ReportDetailsItems" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" > </ListView> </LinearLayout> <Button android:id="@+id/btn_Review" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Review" /> <LinearLayout android:id="@+id/ll_Review" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/tv_Review_ReportType" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Report Type: " android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/tv_Review_DateTime" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Date and Time: " android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/tv_Review_SupportingFiles" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Supporting Files: " android:textAppearance="?android:attr/textAppearanceMedium" /> <ListView android:id="@+id/lv_ReviewItems" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:visibility="gone" > </ListView> <Button android:id="@+id/btn_Review_Send" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Send" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:weightSum="2" > <Button android:id="@+id/btn_Review_Save" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Save Draft" /> <Button android:id="@+id/btn_Review_Discard" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Discard" /> </LinearLayout> </LinearLayout> </LinearLayout>
for Above Code I am getting Following Screen Shot
Following is the xml code after ScrollView
<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" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".WorkplaceObservationActivity" > <Button android:id="@+id/btn_reportType" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Report Type" /> <ListView android:id="@+id/lv_reportType" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="gone" > </ListView> <Button android:id="@+id/btn_defineJob" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Define Job" /> <ListView android:id="@+id/lv_Jobs" android:layout_width="match_parent" android:layout_height="wrap_content" android:checkMark="?android:attr/listChoiceIndicatorMultiple" android:visibility="gone" > </ListView> <Button android:id="@+id/btn_timeLocation" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Time and Location" /> <LinearLayout android:id="@+id/ll_timeLocation" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:visibility="gone" > <Button android:id="@+id/btn_setCurrentTime" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" android:text="Use current time and date" /> <Button android:id="@+id/btn_setCustomTime" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" android:text="Enter custom time" /> <Button android:id="@+id/btn_setCustomDate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" android:text="Enter custom date" /> <TextView android:id="@+id/tv_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="Time and Date: " android:textAppearance="?android:attr/textAppearanceMedium" android:visibility="gone" /> </LinearLayout> <Button android:id="@+id/btn_ReportDetails" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Report Details" /> <LinearLayout android:id="@+id/ll_ReportDetails" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:visibility="gone" > <Button android:id="@+id/btn_CaptureVideo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="Capture Video" /> <ListView android:id="@+id/lv_ReportDetailsItems" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" > </ListView> </LinearLayout> <Button android:id="@+id/btn_Review" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Review" /> <LinearLayout android:id="@+id/ll_Review" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/tv_Review_ReportType" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Report Type: " android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/tv_Review_DateTime" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Date and Time: " android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/tv_Review_SupportingFiles" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Supporting Files: " android:textAppearance="?android:attr/textAppearanceMedium" /> <ListView android:id="@+id/lv_ReviewItems" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:visibility="gone" > </ListView> <Button android:id="@+id/btn_Review_Send" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Send" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:weightSum="2" > <Button android:id="@+id/btn_Review_Save" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Save Draft" /> <Button android:id="@+id/btn_Review_Discard" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Discard" /> </LinearLayout> </LinearLayout> </LinearLayout> </ScrollView>
and following is the sceen shot of above
I want to show complete list of items after scrollview.