2015-09-01 2 views
0

я хочу, чтобы увеличить высоту ListView, я использую этот методКак увеличить высоту списка в динамическом режиме в android?

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(); 
      } 

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

это мой ListView

<ListView 
       android:id="@+id/lvItems" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:divider="#3A9ED4" 
       android:dividerHeight="2px" /> 

но вот моя проблема высота не увеличивается на основе элементов, которые он занимает полностью свои шоу некоторые пустое пространство может любой предложить мне ребята ...

+0

попытаться дать андроид: layout_height = "w rap_content "в listview вместо использования метода динамической высоты –

+0

для 5 элементов высота списка не увеличивается –

ответ

1

Используйте этот метод:

public void setListViewHeightBasedOnChildren(ListView listView) { 
    ListAdapter mAdapter = listView.getAdapter(); 
    int totalHeight = 0; 
    for (int i = 0; i < mAdapter.getCount(); i++) { 
     View mView = mAdapter.getView(i, null, listView); 
     mView.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 
     totalHeight += mView.getMeasuredHeight(); 
    } 
    ViewGroup.LayoutParams params = listView.getLayoutParams(); 
    params.height = totalHeight + (listView.getDividerHeight() * (mAdapter.getCount() - 1)); 
    listView.setLayoutParams(params); 
    listView.requestLayout(); 
} 

Надеюсь, это поможет!

+0

нет такой же проблемы –

+0

не использовать setListViewHeightBasedOnChildren(). просто укажите wrap_parent в xml – Rajesh

+0

, когда я поставлю wrapcontent, он отобразит только один элемент –

0

попробуйте это, используйте Child на основе listview. setListViewHeightBasedOnChildren() это установит высоту вашего дочернего элемента listview.

public class Utils { 

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

    int totalHeight = 0; 
    for (int i = 0; i < listAdapter.getCount(); i++) { 
     View listItem = listAdapter.getView(i, null, listView); 
     listItem.measure(0, 0); 
     totalHeight += listItem.getMeasuredHeight(); 
    } 

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



} 
+0

, когда я вставляю 3 элемента в свой список, но он показывает только два элемента: –

0

вы можете установить высоту в соответствии с вашими элементами списка.

int itemcount=listAdapter.getCount(); 
ViewGroup.LayoutParams params = listview.getLayoutParams(); 
params.height =(itemcount*60); 
listview.setLayoutParams(params); 
listview.requestLayout(); 

и layout.xml высота набор для 0dp списке следует

android:layout_height="0dp" 
+0

не работает –

+0

нормально, он все еще показывает один элемент или что? – Meenaxi

+0

это поглощает огромное пространство –

0

@Rajesh ответ хорош только убедитесь, что вы называете метод после ваш ListView был загружен с его данными, как показано ниже.

setListViewHeightBasedOnChildren(yourlistView); 
0

Попробуйте этот код, я уверен, что это будет работать:

1) Создайте новый класс с именем LVHelper и вставьте код ниже:

public class LVHelper { 

// Created By Rahul Ravindran 20/07/17 
// This class increases listview's height as and when more item is added 

public static void getListViewSize(ListView myListView) { 
    ListAdapter myListAdapter = myListView.getAdapter(); 
    if (myListAdapter == null) { 
     //do nothing return null 
     return; 
    } 
    //set listAdapter in loop for getting final size 
    int totalHeight = 0; 
    for (int size = 0; size < myListAdapter.getCount(); size++) { 
     View listItem = myListAdapter.getView(size, null, myListView); 
     listItem.measure(0, 0); 
     totalHeight += listItem.getMeasuredHeight(); 
    } 
    //setting listview item in adapter 
    ViewGroup.LayoutParams params = myListView.getLayoutParams(); 
    params.height = totalHeight + (myListView.getDividerHeight() * (myListAdapter.getCount() - 1)); 
    myListView.setLayoutParams(params); 
} 

2) после установки списка адаптер для просмотра добавить эту строку кода:

myListView.setAdapter(#Your Adapter Here#); 
LVHelper.getListViewSize(myListView); 
Смежные вопросы