2013-06-26 2 views
1

Я хочу отобразить ListView с некоторыми элементами при получении ответа на URL-адрес.Отображение ListView (со всеми видимыми элементами) в нижней части экрана при выполнении условия

Чтобы отобразить ListView от дна, что я сделал это, я поставил его в конце LinearLayout (это родительский) с visibility набором для gone.

Макет файла:

</LinearLayout> 
    . 
    . 
    . 
    <!-- ListView at bottom --> 
    <ListView 
     android:id="@+id/places_list" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@color/gray" 
     android:visibility="gone" > 
    </ListView> 

</LinearLayout> 

Когда я хочу, чтобы отобразить ListView, я сделать его видимым и перевести его с помощью анимации, как показано ниже:

// Show listView that displays a list of items 
private void showListView() { 

    ObjectAnimator animator = null; 
    placeListView.setVisibility(View.VISIBLE); 

    // Display listView with animation 
    if (activeEditTextId == R.id.from_location) { 

     animator = ObjectAnimator.ofFloat(placeListView, "y", fromLocation.getY() + fromLocation.getHeight() + 5); 

    } else if (activeEditTextId == R.id.to_location) { 

     animator = ObjectAnimator.ofFloat(placeListView, "y", toLocation.getY() + toLocation.getHeight() + 5); 
    } 

    animator.setDuration(2000); 
    animator.start(); 

    listAdapter.notifyDataSetChanged(); 
} 


Но проблема в том, что с этим расположение, ListView высота - 37 только. Я понимаю, это потому, что в этом случае можно получить только такую ​​высоту для ListView.

Но как показать ListView с его полным размером, то есть все предметы, видимые сразу?

+0

установить свою высоту с помощью wrap_content .. – Riser

+0

@Segi Tried. Не разрешено. – Geek

+0

Каков результат для этого? – Riser

ответ

4

Я решил проблему, вычисляя высоту ListView динамически, когда содержимое списка изменяется и перед отображением ListView.
Код копирования от this link.

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(); 
} 
Смежные вопросы