public class SynchronisedScrollView extends ListView {
private ScrollViewListener scrollViewListener = null;
public SynchronisedScrollView(Context context) {
super(context);
}
public SynchronisedScrollView(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
}
public SynchronisedScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onScrollChanged(int x, int y, int oldx, int oldy) {
Log.d("Hello", "I am scrolled");
// super.onScrollChanged(x, y, oldx, oldy);
}
}
我想了解listView的滚动程度,因此我扩展了ListView。我能够滚动列表。但是没有调用OnScrollChanged。对于 ScrollView 和 HorizontalScrollView 每当滚动时都会调用OnScrollChanged。滚动ListView时会触发哪个函数。
答案 0 :(得分:4)
在ListView
中,您必须明确注册onScrollListener
才能接收onScroll()
个事件。
答案 1 :(得分:0)
我认为您正在寻找的方法是:
public void offsetChildrenTopAndBottom(int offset) {
// ...
}
来自ViewGroup
。你可以做的是扩展ListView以收集给予ListView
之一的偏移并将其传递给另一个ListView
。确保在接收端调用super.offsetChildrenTopAndBottom,否则很容易就会出现堆栈溢出。
我会创建一个私有方法并拥有新的Observable视图。
public class ObservableListView extends ListView {
private ObservableListView peer;
// [Constructors] make sure you override all the super constructors.
// Can have trouble with layouts otherwise
public void setPeer(ObservableListView peer) {
this.peer = peer;
}
@Override
public void offsetTopAndBottom(int offset) {
super.offsetTopAndBottom(offset);
if (peer != null) {
peer.internalVerticalOffset(offset);
}
}
private void internalVerticalOffset(int offset) {
super.offsetTopAndBottom(offset);
}
}
如果你觉得自己很勇敢,你也可以定义一个xml属性来给出一个ListView
的id,然后让它设置对等关系。 (如果你有兴趣,我可以扩展)
我的不好,这是不工作代码。我试图用隐藏的方法弄清楚如何做到这一点。在这段代码中,我重写了错误的方法。将很快更新。
<强>更新强>
好的,经过一些研究后我认为最好的方法是将ListView的扩展名与TouchDelegate
结合起来。