问题复现:
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);
}