Android ListView 和 ScrollView 衝突問題

來源:互聯網
上載者:User

標籤: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 衝突問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.