Android ScrollView中嵌套ListView只显示一行的解决办法

Android编程中,ScrollView嵌套ListView时,会无法正确的计算ListView的大小。解决的办法如下:

(非原创,网上搜到的解决方法)

    public class MainActivity extends Activity {   
        private ListView listView;   
        @Override   
        protected void onCreate(Bundle savedInstanceState) {   
            super.onCreate(savedInstanceState);   
            setContentView(R.layout.activity_main);   
            listView = (ListView) findViewById(R.id.listView1);   
            String[] adapterData = new String[] { "Afghanistan", "Albania",… … "Bosnia"};   
            listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,adapterData));   
            setListViewHeightBasedOnChildren(listView);   
        }   
        public void setListViewHeightBasedOnChildren(ListView listView) {   
            // 获取ListView对应的Adapter   
            ListAdapter listAdapter = listView.getAdapter();   
            if (listAdapter == null) {   
                return;   
            }   
       
            int totalHeight = 0;   
            for (int i = 0, len = listAdapter.getCount(); i < len; i++) {   
                // listAdapter.getCount()返回数据项的数目   
                View listItem = listAdapter.getView(i, null, listView);   
                // 计算子项View 的宽高   
                listItem.measure(0, 0);    
                // 统计所有子项的总高度   
                totalHeight += listItem.getMeasuredHeight();    
            }   
       
            ViewGroup.LayoutParams params = listView.getLayoutParams();   
            params.height = totalHeight+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));   
            // listView.getDividerHeight()获取子项间分隔符占用的高度   
            // params.height最后得到整个ListView完整显示需要的高度   
            listView.setLayoutParams(params);   
        }   
    }   

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。