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

}

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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水的川

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值