Scrollview嵌套ListView

我們在做android開發的時候,經常會遇到Scrollview嵌套ListView的問題,其中有幾點問題,就是scrollview和listview都會滑動。

第一個問題,解決listview的滑動:設置listview不滑動

重寫listview,重寫listview中的onmeasure方法

/**

* 設置不滾動

*/

public void onMeasure(int widthMeasureSpec, int heightMeasureSpec){

int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,

MeasureSpec.AT_MOST);

super.onMeasure(widthMeasureSpec, expandSpec);

}

第二個問題,焦點問題,剛進入這個頁面時焦點往往會移到listview上面去,所以

調用下面一個方法,將焦點移到scrollview上,並且定位到頂部

private void scrollToTop() {

new Handler().postDelayed(new Runnable() {

@Override

public void run() {

getView(R.id.topLayout).requestFocus();

getView(R.id.topLayout).setFocusable(true);

getView(R.id.topLayout).setFocusableInTouchMode(true);

scrollView.fullScroll(ScrollView.FOCUS_UP);

}

}, 500);

}

第三個問題,因爲listview之間的item會有一些divider分隔,所以有些時候會出現listview中的item顯示不全,所以現在要根據實際

通過計算將listview的實際高度給計算出來:

/**

* 根據字item的高度設置listview的高度

* @param listView

*/

public void setListViewHeightBasedOnChildren(ListView listView) { 

    if(listView == null) return;

    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); 

}

這樣就解決了其中最重要的三個問題。。。有什麼問題還請大家不吝賜教。。
發佈了31 篇原創文章 · 獲贊 12 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章