2013-06-26 67 views
1

我想在收到URL響應時顯示ListView以及一些項目。條件滿足時,從屏幕底部顯示ListView(所有項目都可見)

從底部顯示ListView我所做的是,我把它放在LinearLayout(它的父級)的末尾,visibility設置爲gone

版式文件:

​​

當我想顯示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試過了。沒解決。 – 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(); 
} 
相關問題