listview選中一行,ScrollView嵌套ListView只顯示一行

 2023-10-18 阅读 21 评论 0

摘要:在開發的過程當中,由于手機屏幕的大小的限制,我們經常需要使用滑動的方式,來顯示更多的內容。在最近的工作中,遇見一個需求,需要將ListView嵌套到ScrollView中顯示。于是乎有了如下布局:??<LinearLayout?xmlns:android="

在開發的過程當中,由于手機屏幕的大小的限制,我們經常需要使用滑動的方式,來顯示更多的內容。在最近的工作中,遇見一個需求,需要將ListView嵌套到ScrollView中顯示。于是乎有了如下布局:?

?

  1. <LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"???
  2. ????xmlns:tools="http://schemas.android.com/tools"???
  3. ????android:layout_width="match_parent"???
  4. ????android:layout_height="match_parent"???
  5. ????android:background="#FFE1FF"???
  6. ????android:orientation="vertical"?>???
  7. ????<ScrollView???
  8. ????????android:layout_width="match_parent"???
  9. ????????android:layout_height="match_parent"?>???
  10. ????????<LinearLayout???
  11. ????????????android:layout_width="match_parent"???
  12. ????????????android:layout_height="match_parent"?>???
  13. ????????????<ListView???
  14. ????????????????android:id="@+id/listView1"???
  15. ????????????????android:layout_width="match_parent"???
  16. ????????????????android:layout_height="match_parent"???
  17. ????????????????android:fadingEdge="vertical"???
  18. ????????????????android:fadingEdgeLength="5dp"?/>???
  19. ????????</LinearLayout>???
  20. ????</ScrollView>???
  21. </LinearLayout>???

?

運行程序,如下結果,無論你如何調整layout_width,layout_height屬性,ListView列表只顯示一列?

在查閱的各種文檔和資料后,發現在ScrollView中嵌套ListView空間,無法正確的計算ListView的大小,故可以通過代碼,根據當前的ListView的列表項計算列表的尺寸。實現代碼如下:?

?

  1. public?class?MainActivity?extends?Activity?{???
  2. ????private?ListView?listView;???
  3. ????@Override???
  4. ????protected?void?onCreate(Bundle?savedInstanceState)?{???
  5. ????????super.onCreate(savedInstanceState);???
  6. ????????setContentView(R.layout.activity_main);???
  7. ????????listView?=?(ListView)?findViewById(R.id.listView1);???
  8. ????????String[]?adapterData?=?new?String[]?{?"Afghanistan",?"Albania",…?…?"Bosnia"};???
  9. ????????listView.setAdapter(new?ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,adapterData));???
  10. ????????setListViewHeightBasedOnChildren(listView);???
  11. ????}???
  12. ????public?void?setListViewHeightBasedOnChildren(ListView?listView)?{???
  13. ????????//?獲取ListView對應的Adapter???
  14. ????????ListAdapter?listAdapter?=?listView.getAdapter();???
  15. ????????if?(listAdapter?==?null)?{???
  16. ????????????return;???
  17. ????????}???
  18. ???
  19. ????????int?totalHeight?=?0;???
  20. ????????for?(int?i?=?0,?len?=?listAdapter.getCount();?i?<?len;?i++)?{???
  21. ????????????//?listAdapter.getCount()返回數據項的數目???
  22. ????????????View?listItem?=?listAdapter.getView(i,?null,?listView);???
  23. ????????????//?計算子項View?的寬高???
  24. ????????????listItem.measure(0,?0);????
  25. ????????????//?統計所有子項的總高度???
  26. ????????????totalHeight?+=?listItem.getMeasuredHeight();????
  27. ????????}???
  28. ???
  29. ????????ViewGroup.LayoutParams?params?=?listView.getLayoutParams();???
  30. ????????params.height?=?totalHeight+?(listView.getDividerHeight()?*?(listAdapter.getCount()?-?1));???
  31. ????????//?listView.getDividerHeight()獲取子項間分隔符占用的高度???
  32. ????????//?params.height最后得到整個ListView完整顯示需要的高度???
  33. ????????listView.setLayoutParams(params);???
  34. ????}???
  35. }???
運行結果,OK問題搞定,打完收工?

listview選中一行。?


來源:?http://www.cnblogs.com/zhwl/p/3333585.html


來自為知筆記(Wiz)


轉載于:https://www.cnblogs.com/jeffen/p/6739817.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/146644.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息