標籤:android listview scrollview 衝突
最近做一款APP,其中有一個類似微博的評論功能的介面,先是列出微博的本文內容和圖片等,然後下邊是評論。一開始就想著用一個ScrollView把主要內容和評論區的ListView包起來,然後添加各個控制項的內容即可(對,感覺上有點像這個CSDN部落格的編輯介面嘛),但是寫出來之後發現ListView只顯示出了一個條目的高度,並且不能滑動,網上搜了一下發現原因是ScrollView和ListView都是可滑動的,把它們放在一塊會有衝突,最後還是ScrollView獲得了焦點,ListView不能滑動。網上的解決方案最多的是在載入ListView時用getMeasure計算每個條目和分割線的高度,然後相加,把結果設定為ListView控制項的高度,不過貌似是只適用於ListView每個條目高度都一樣的情況(沒有試過,很奇怪為什麼會這樣)。要麼就是自訂一個繼承自ListView的控制項,也是事先設定好ListView的高度,但這樣總歸比較麻煩,而且準確度不如由系統自己構造好。
懶癌發作實在不想自己去做這些事情,於是便想試一下比較投機的方法,就是在ListView的Adapter的getView方法中根據position構造不同的介面,即如果position是0,則用原來主要資訊(微博本文,圖片)的xml檔案取inflate convertView,否則就用評論條目的xml去inflate,經實驗果然可行。之後不死心想看下有沒有更好的實現方法,去overflow上找了一下,發現有人推薦的方法和我的差不多,所以認為這種方法是比較好的,不需要做額外的工作,只需要把inflate的工作由主Activity放在Adapter裡就可以了。
getView方法
@Overridepublic View getView(int position, View convertView, ViewGroup parent){/*主資訊介面*/if(0 == position){MainHolder holder = null;convertView = inflater.inflate(R.layout.info, parent, false);holder = new MainHolder();convertView.setTag(holder); ······ ······}/*評論介面*/else{ItemHolder holder = null;convertView = inflater.inflate(R.layout.item, parent, false);holder = new ItemHolder();convertView.setTag(holder);············return convertView;}}
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Android ListView 和 ScrollView 衝突問題