Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Non-scrollable ListView inside ScrollView

I'm trying to make a layout like this:

The problem is that I don't want the ListViews to be scrollable. I want them to be as high as they need to and make the whole screen be scrollable. If I set the height of the ListView to wrap_content, that doesn't work. The only way to make it work is to set a specific height - but I don't know how many items will be in the ListView.

I know that I should not put ListView inside ScrollView - but I don't want the ListView to be scrollable, just to show all items.

Maybe there is a better way to make it work?

like image 622
Dennis Avatar asked Sep 15 '13 14:09

Dennis


2 Answers

You Create Custom ListView Which is non Scrollable

public class NonScrollListView extends ListView {      public NonScrollListView(Context context) {         super(context);     }     public NonScrollListView(Context context, AttributeSet attrs) {         super(context, attrs);     }     public NonScrollListView(Context context, AttributeSet attrs, int defStyle) {         super(context, attrs, defStyle);     }     @Override     public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {             int heightMeasureSpec_custom = MeasureSpec.makeMeasureSpec(                     Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);             super.onMeasure(widthMeasureSpec, heightMeasureSpec_custom);             ViewGroup.LayoutParams params = getLayoutParams();             params.height = getMeasuredHeight();         } } 

In Your Layout Resources File

<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:fadingEdgeLength="0dp"     android:fillViewport="true"     android:overScrollMode="never"     android:scrollbars="none" >      <RelativeLayout         android:layout_width="match_parent"         android:layout_height="wrap_content" >          <!-- com.Example Changed with your Package name -->          <com.Example.NonScrollListView             android:id="@+id/lv_nonscroll_list"             android:layout_width="match_parent"             android:layout_height="wrap_content" >         </com.Example.NonScrollListView>          <RelativeLayout             android:layout_width="match_parent"             android:layout_height="wrap_content"             android:layout_below="@+id/lv_nonscroll_list" >              <!-- Your another layout in scroll view -->          </RelativeLayout>     </RelativeLayout>  </ScrollView> 

In Java File

Create a object of your customListview instead of ListView like :
NonScrollListView non_scroll_list = (NonScrollListView) findViewById(R.id.lv_nonscroll_list);

like image 149
Dedaniya HirenKumar Avatar answered Oct 08 '22 18:10

Dedaniya HirenKumar


There is no need to use a listview at all.

If you really think about it, a listview can be replaced with a LinearLayout in your case. The Adapter would be the same, however instead of attaching the adapter with your listview, simply call the getView function of the adapter in a for loop on your data and add the retrieved views to your vertical linearlayout.

However this approach is only recommended if you have a small number of items in your list and your display representation of those items is not memory intensive.

like image 32
Sam Avatar answered Oct 08 '22 17:10

Sam