天天看點

ScrollView嵌套ListView沖突的最簡潔解決方案

我們在做項目的時候,常常會遇到ScrollView嵌套ListView(或GirdView)的問題,然而嵌套在 ScrollView的 ListVew(或GirdView)會資料顯示不全,那麼我們有什麼好的方法來解決這個問題呢?

下面給大家帶來的一個解決方法是本人自己用的,感覺特别簡潔,好用。

話不多說,上菜!

自定義一個ListView

/**
 *預設顯示的首項是ListView,需要手動把ScrollView滾動至最頂端。
 *舉例如下:
 *mScrollView = (ScrollView) findViewById(R.id.mScrollView);
 *mScrollView.smoothScrollTo(0, 0);
 *@author 樹根
 *
 */
public class ListViewForScrollView extends ListView {
	public ListViewForScrollView(Context context) {
		super(context);
	}
	public ListViewForScrollView(Context context, AttributeSet attrs) {
		super(context, attrs);
	}
	public ListViewForScrollView(Context context, AttributeSet attrs,         
			int defStyle) {
		super(context, attrs, defStyle);
	}
	@Override
	/**
	 * 重寫該方法,達到使ListView适應ScrollView的效果
	 */
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
				MeasureSpec.AT_MOST);
		super.onMeasure(widthMeasureSpec, expandSpec);
	}
}
           

然後在你的布局檔案裡把需要嵌套在ScrollView的ListView都用這個自定義的ListView就可以了。

注意:打開嵌套ListVew的 ScrollView的頁面布局 預設 起始位置不是最頂部

解決方法一:在代碼裡加這句就ok了 

mScrollView.smoothScrollTo(0, 0);
           

解決方法二:把套在裡面的Gridview 或者 ListVew 不讓擷取焦點即可。

gridview.setFocusable(false); listview.setFocusable(false);

注意:在xml布局裡面設定android:focusable=“false”不生效

(更新:有朋友說這種方法不太好用,是以還是建議大家用第一種吧,我一直都是用第一種,嘿嘿)

是不是灰常簡單嘞?so easy! 媽媽再也不用擔心我的學習了

當然網上還有其他解決方法,大家有興趣的可以看看,不過相對于其他方法,這個方法真的是簡潔,實用!簡潔,實用!簡潔,實用!

繼續閱讀