Android Adapter里面嵌套ListView實(shí)例詳解
Android Adapter里面嵌套ListView實(shí)例詳解
前言:
可嵌套~但是顯示需要特殊處理下~以下是處理方法
前幾天因?yàn)轫?xiàng)目的需要,要在一個ListView中放入另一個ListView,也即在一個ListView的每個ListItem中放入另外一個ListView。但剛開始的時候,會發(fā)現(xiàn)放入的小ListView會顯示不完全,它的高度始終有問題。上網(wǎng)查了下,發(fā)現(xiàn)別人也有遇到這樣的問題,而大多數(shù)人都不推薦這樣的設(shè)計(jì),因?yàn)槟J(rèn)情況下Android是禁止在ScrollView中放入另外的ScrollView的,它的高度是無法計(jì)算的。
又搜索了一下,發(fā)現(xiàn)有StackOverflow上的牛人已經(jīng)解決了這個問題,經(jīng)過試驗(yàn)發(fā)現(xiàn)是可以解決問題的,它的思路就是在設(shè)置完ListView的Adapter后,根據(jù)ListView的子項(xiàng)目重新計(jì)算ListView的高度,然后把高度再作為LayoutParams設(shè)置給ListView,這樣它的高度就正確了,以下是源碼:
public class Utility { 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); } }
只要在設(shè)置ListView的Adapter后調(diào)用此靜態(tài)方法即可讓ListView正確的顯示在其父ListView的ListItem中。但是要注意的是,子ListView的每個Item必須是LinearLayout,不能是其他的,因?yàn)槠渌腖ayout(如RelativeLayout)沒有重寫onMeasure(),所以會在onMeasure()時拋出異常。
在ScrollView中嵌套ListView(或者ScrollView)的另外一個問題就是,子ScrollView中無法滑動的(如果它沒有顯示完全的話),因?yàn)榛瑒邮录桓窼crollView吃掉,如果想要讓子ScrollView也可以滑動,只能強(qiáng)行截取滑動事件,有牛人在論壇中發(fā)過代碼說可以。雖然我沒有親自試過,但估計(jì)是可行的。
雖然在ScrollView中顯示ScrollView在技術(shù)上的難題可以攻破,但是這樣的設(shè)計(jì)卻是非常差的用戶體驗(yàn)因?yàn)橛脩魰蝗菀卓吹胶筒僮髯覵crollView中的內(nèi)容。比如好的設(shè)計(jì)是,父ListView的每個Item只顯示概括性的描述,然后點(diǎn)擊其Item會進(jìn)入另外一個頁面來詳細(xì)描述和展示以及對這個Item的操作。
以上就是對Android Adapter嵌套Listview 的實(shí)例詳解,本站關(guān)于Android 開發(fā)的文章還有很多,希望大家搜索查閱,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
- Android自定義Adapter的ListView的思路及代碼
- android開發(fā)中ListView與Adapter使用要點(diǎn)介紹
- Android listview與adapter詳解及實(shí)例代碼
- Android開發(fā)中ListView自定義adapter的封裝
- Android ListView適配器(Adapter)優(yōu)化方法詳解
- Android ListView自定義Adapter實(shí)現(xiàn)仿QQ界面
- Android ListView和Adapter數(shù)據(jù)適配器的簡單介紹
- Android UI:ListView - SimpleAdapter實(shí)例詳解
- Android開發(fā)實(shí)現(xiàn)ListView和adapter配合顯示圖片和文字列表功能示例
相關(guān)文章
ReactiveCocoa代碼實(shí)踐之-RAC網(wǎng)絡(luò)請求重構(gòu)
這篇文章主要介紹了ReactiveCocoa代碼實(shí)踐之-RAC網(wǎng)絡(luò)請求重構(gòu) 的相關(guān)資料,需要的朋友可以參考下2016-04-04Android提高之SQLite分頁讀取實(shí)現(xiàn)方法
這篇文章主要介紹了Android的SQLite分頁讀取實(shí)現(xiàn)方法,在Android項(xiàng)目開發(fā)中非常實(shí)用,需要的朋友可以參考下2014-08-08Android Drawable和Bitmap的轉(zhuǎn)換實(shí)例詳解
這篇文章主要介紹了Android Drawable和Bitmap的轉(zhuǎn)換實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-05-05Android編程實(shí)現(xiàn)播放視頻時切換全屏并隱藏狀態(tài)欄的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)播放視頻時切換全屏并隱藏狀態(tài)欄的方法,結(jié)合實(shí)例形式分析了Android視頻播放事件響應(yīng)及相關(guān)屬性設(shè)置操作技巧,需要的朋友可以參考下2017-08-08Android仿美團(tuán)網(wǎng)、大眾點(diǎn)評購買框懸浮效果修改版
這篇文章主要為大家詳細(xì)介紹了Android仿美團(tuán)網(wǎng)、大眾點(diǎn)評購買框懸浮效果的修改版,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-02-02Android中WebView實(shí)現(xiàn)點(diǎn)擊超鏈接啟動QQ的方法
這篇文章主要給大家介紹了在Android中WebView如何實(shí)現(xiàn)點(diǎn)擊超鏈接啟動QQ的方法,文中給出了詳細(xì)的示例代碼,相信對大家的學(xué)習(xí)或者工作具有一定的參考價值,需要的朋友們下面來一起看看吧。2017-04-04Android中基于XMPP協(xié)議實(shí)現(xiàn)IM聊天程序與多人聊天室
這篇文章主要介紹了Android中基于XMPP協(xié)議實(shí)現(xiàn)IM聊天程序與多人聊天室的方法,XMPP基于XML數(shù)據(jù)格式傳輸,一般用于即時消息(IM)以及在線現(xiàn)場探測,需要的朋友可以參考下2016-02-02