我有这个litle自定义ListView女巫实际上是一个' ListView'有一些回电。当我在启动Activity时动态更改填充(工具栏的高度),Items不响应填充,我必须滚动到顶部一些如何。
这是我的ListWiew。
<somesustom.cutom.ObservableListView
android:id="@+id/listview"
android:clipToPadding="false"
android:theme="@style/ListView"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
所以问题是如何从代码中完全滚动到顶部?
所以我找到了解决方案
首先我从xml中删除了android:clipToPadding="false"
。
然后我像我这样配置ObservableListView
public class ObservableListView extends ListView {
private boolean clipPadding = true;
public ObservableListView(Context context) {
this(context, null, 0);
setScrollListner();
}
public ObservableListView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
setScrollListner();
}
public ObservableListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setScrollListner();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
if(clipPadding) /// this is the trick, if clip to padding is true, then set selection 0
setSelection(0);
}
public void setScrollListner()
{
clipPadding = true;
super.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if(clipPadding && scrollState == OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {
setClipToPadding(false);
clipPadding = false; // if ii begin to scroll clipPadding
// turns to false and onMeasure set selection not being called.
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
});
}
}
如果我按钮点击更改填充,我不确定这种方法是否会起作用。但在我的情况下,我从ViewTreeObserver.OnGlobalLayoutListener设置填充,这非常有效。
答案 0 :(得分:0)
您可以尝试以下两种方法之一:
listview.smoothScrollToPosition(0);
或
listview.setSelection(0):