android下activity中多個listview隻允許主界面滾動

之前發現瞭自己的APP在處理兩個listview時產生的一個bug。當兩個listview中的item數量多出手機屏幕時,listview不能顯示完全。一開始覺得隻要加一個scrollview就可以瞭,但是後來發現想法是錯誤的,因為listview本身也是一個scrollview,那麼scrollview嵌套scrollview的問題就很麻煩瞭,到底把滾動權交給誰,結果是哪個listview都不能滾動,後來谷歌瞭一大圈,終於發現瞭兩個帖子,給我啟發:

1 stackoverflow

https://stackoverflow.com/questions/3495890/how-can-i-put-a-listview-into-a-scrollview-without-it-collapsing

2 csdn

https://blog.csdn.net/huangbiao86/article/details/7978149

主要的解決方法,就是禁用listview的滾動條,從而隻有一個scrollview的滾動條。那麼怎麼禁用?或者限定listview的android:layout_width。

網上提供的方法就是在刷新listview之前,計算list item的總的高度,從而設置android:layout_width,那麼就可以做到固定高度瞭。

 

/***  
     * 動態設置listview的高度  
     *   
     * @param listView  
     */    
    public void setListViewHeightBasedOnChildren(ListView listView) {    
        ListAdapter listAdapter = listView.getAdapter();    
        if (listAdapter == null) {    
            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);    
    }    

 

 

 

雖然這麼做瞭,但是我最後還是發現高度不對,為什麼呢?我調試發現,無論item裡面的textview不管有幾行,item的getMeasreHeight始終是固定值。那麼怪不得瞭,textview的高度無法計算的話,那麼高度也還是確定不瞭。無奈,我隻能選擇折中,設置textview的屬性:

android:sinleline="true"

android:ellipsie="end"

android::layout_width ="wrap_content"

那麼設置textview行為固定啦,這樣就可以保證高度計算的準確。

至此,bug解完

 

發佈留言