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方法

@Override
public 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;
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章