Android筆記之:在ScrollView中嵌套ListView的方法
更新時間:2013年05月23日 11:01:18 作者:
本篇文章是對Android中在ScrollView中嵌套ListView的方法進行了詳細的分析介紹,需要的朋友參考下
前幾天因為項目的需要,要在一個ListView中放入另一個ListView,也即在一個ListView的每個ListItem中放入另外一個ListView。但剛開始的時候,會發(fā)現(xiàn)放入的小ListView會顯示不完全,它的高度始終有問題。上網(wǎng)查了下,發(fā)現(xiàn)別人也有遇到這樣的問題,而大多數(shù)人都不推薦這樣的設計,因為默認情況下Android是禁止在ScrollView中放入另外的ScrollView的,它的高度是無法計算的。
又搜索了一下,發(fā)現(xiàn)有StackOverflow上的牛人已經(jīng)解決了這個問題,經(jīng)過試驗發(fā)現(xiàn)是可以解決問題的,它的思路就是在設置完ListView的Adapter后,根據(jù)ListView的子項目重新計算ListView的高度,然后把高度再作為LayoutParams設置給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);
}
}
只要在設置ListView的Adapter后調用此靜態(tài)方法即可讓ListView正確的顯示在其父ListView的ListItem中。但是要注意的是,子ListView的每個Item必須是LinearLayout,不能是其他的,因為其他的Layout(如RelativeLayout)沒有重寫onMeasure(),所以會在onMeasure()時拋出異常。
在ScrollView中嵌套ListView(或者ScrollView)的另外一個問題就是,子ScrollView中無法滑動的(如果它沒有顯示完全的話),因為滑動事件會被父ScrollView吃掉,如果想要讓子ScrollView也可以滑動,只能強行截取滑動事件,有牛人在論壇中發(fā)過代碼說可以。雖然我沒有親自試過,但估計是可行的。
雖然在ScrollView中顯示ScrollView在技術上的難題可以攻破,但是這樣的設計卻是非常差的用戶體驗因為用戶會不容易看到和操作子ScrollView中的內容。比如好的設計是,父ListView的每個Item只顯示概括性的描述,然后點擊其Item會進入另外一個頁面來詳細描述和展示以及對這個Item的操作。
又搜索了一下,發(fā)現(xiàn)有StackOverflow上的牛人已經(jīng)解決了這個問題,經(jīng)過試驗發(fā)現(xiàn)是可以解決問題的,它的思路就是在設置完ListView的Adapter后,根據(jù)ListView的子項目重新計算ListView的高度,然后把高度再作為LayoutParams設置給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);
}
}
只要在設置ListView的Adapter后調用此靜態(tài)方法即可讓ListView正確的顯示在其父ListView的ListItem中。但是要注意的是,子ListView的每個Item必須是LinearLayout,不能是其他的,因為其他的Layout(如RelativeLayout)沒有重寫onMeasure(),所以會在onMeasure()時拋出異常。
在ScrollView中嵌套ListView(或者ScrollView)的另外一個問題就是,子ScrollView中無法滑動的(如果它沒有顯示完全的話),因為滑動事件會被父ScrollView吃掉,如果想要讓子ScrollView也可以滑動,只能強行截取滑動事件,有牛人在論壇中發(fā)過代碼說可以。雖然我沒有親自試過,但估計是可行的。
雖然在ScrollView中顯示ScrollView在技術上的難題可以攻破,但是這樣的設計卻是非常差的用戶體驗因為用戶會不容易看到和操作子ScrollView中的內容。比如好的設計是,父ListView的每個Item只顯示概括性的描述,然后點擊其Item會進入另外一個頁面來詳細描述和展示以及對這個Item的操作。
您可能感興趣的文章:
- Android之ScrollView嵌套ListView和GridView沖突的解決方法
- Android ListView的item中嵌套ScrollView的解決辦法
- Android編程之截屏實現(xiàn)方法(包括scrollview與listview)
- Android ScrollView嵌套ExpandableListView顯示不正常的問題的解決辦法
- Android 中ScrollView嵌套GridView,ListView的實例
- Android ListView與ScrollView沖突的解決方法總結
- Android ScrollView 下嵌套 ListView 或 GridView出現(xiàn)問題解決辦法
- Android 中ScrollView與ListView沖突問題的解決辦法
- Android開發(fā)實現(xiàn)ScrollView中嵌套兩個ListView的方法
相關文章
Android音頻開發(fā)之SurfaceView的使用詳解
這篇文章主要為大家介紹了Android中SurfaceView的使用方法,本文通過簡要的案例,為大家進行了詳細的講解,需要的朋友可以參考一下2022-04-04
Android入門之BroadCast模擬實現(xiàn)異地登錄事件發(fā)生后的主動退出
隨著對BroadCast的越來越深入,我們今天要實現(xiàn)一個稍微復雜一點的BroadCast。即只允許一個設備登錄一個帳號時,APP會彈一個對話框如:您的賬號在別處登錄,請重新登陸!感興趣的可以了解一下2022-12-12
Android中ScrollView監(jiān)聽滑動距離案例講解
這篇文章主要介紹了Android中ScrollView監(jiān)聽滑動距離案例講解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下2021-08-08
Android中Intent傳遞對象的兩種方法Serializable,Parcelable
這篇文章主要介紹了Android中的傳遞有兩個方法,一個是Serializable,另一個是Parcelable,對intent傳遞對象的兩種方法感興趣的朋友一起學習吧2016-01-01
Android 檢測鍵盤顯示或隱藏鍵盤的實現(xiàn)代碼
這篇文章主要介紹了Android 檢測鍵盤顯示或隱藏鍵盤的實現(xiàn)代碼的相關資料,需要的朋友可以參考下2017-07-07
Android框架Volley使用之Json請求實現(xiàn)
這篇文章主要介紹了Android框架Volley使用之Json請求實現(xiàn),本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下2019-05-05
Android之采用execSQL與rawQuery方法完成數(shù)據(jù)的添刪改查操作詳解
本篇文章是對用execSQL與rawQuery方法完成數(shù)據(jù)的添刪改查操作進行了詳細的分析介紹,需要的朋友參考下2013-06-06

