Scrollview嵌套ListView

来源:互联网 发布:江苏省大数据交易中心 编辑:程序博客网 时间:2024/04/29 17:43

我们在做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

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

}

这样就解决了其中最重要的三个问题。。。有什么问题还请大家不吝赐教。。
0 0
原创粉丝点击