Android ScrollView嵌套ListView加载数据后不置顶

问题复现:

ScrollView或者其他继承于ScrollView的自定义控件,里面嵌套了ListView或其他继承于该控件的自定义控件,在加载完数据后,ScrollView位置会定位在ListView上部而不是ScrollView下的顶部。

问题原因:

ListView在没有加载数据前,ScrollView已经把listview的位置绘制完成,在ListView加载数据后,高度会改变,这时ScrollView会重新绘制,此时的焦点在ListView,所以重新绘制完成后定格在ListView的顶部而不是ScrollView的顶部。

解决问题:

1.在初始化listview的时候把焦点取消掉。

listview.setFocusable(false);

PS:在XML里写经测试不起作用,所以在activity里使用。

2.在listview加载完数据后,让ScrollView滚动到顶部

scrollview.smoothScrollTo(0,0);

3.其他方法:只提供思路并不提倡使用。

使用其他控件或者布局获取焦点从而让ScrollView放松警惕o(* ̄︶ ̄*)o

扩展:

因为ScrollView直接嵌套listview会只留一个item的高度,因此

获取全部高度的listview在自定义view继承ListView后重写下面方法

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

// TODO Auto-generated method stub

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

        MeasureSpec.AT_MOST);

  super.onMeasure(widthMeasureSpec, spec);

}

你可能感兴趣的:(Android ScrollView嵌套ListView加载数据后不置顶)