【android蓄積】ScrolViewとListViewの問題

2639 ワード

ScrollViewとListViewを一緒に使用すると競合し、ListViewが不完全に表示されます.ネット上でどのように解決するかにも多くの例がありますが、ここでは2つの簡単な案しか言いません.
1.ListViewの高さを手動で計算する方法は以下の通りである.
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);  

    }  

ここではmeasuredHeightを用いて高さを取得するが,measuredHeightは実際の高さではないので,この方法で計算した高さは実際の高さと誤差がある.
 
2.ListViewのonMeasureメソッドを書き換え、各サブItemの高さを再計算する
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

        //        child      

        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,

                MeasureSpec.AT_MOST);

        super.onMeasure(widthMeasureSpec, expandSpec);

    }