0

我正在为两个相互依赖的对象的两个侦听器“同步”而苦苦挣扎。

假设我们有一个ListView list和一个可滚动的LinearLayout slider。两者都在一个布局中Fragment

当我将列表滚动到某个项目时,滑块应该autoscroll显示相应的位置。当我滚动滑块时,列表应该smoothScrollToPosition并显示相应的位置。

因此,我有

interface SliderListener {
    public onPositionChanged();
}

interface ListViewListener {
    public onListPositionChanged();
}

如果我只是在一个通用控制器中实现这两个方法(我在一个控制器中实现它们Fragment),那么就会出现死锁(它们无休止地尝试相互滚动并生成越来越多的事件)。

我尝试使用一些简单的布尔信号量变量并在执行操作之前检查它的状态,但它仍然会导致并发。

同步监听器使用的正确方法是什么?

4

1 回答 1

1

您确实为事件创建了递归逻辑循环:

A re-positioned --> scroll B= r-epositioning B --> scroll A (re-postioned) --> .....

因为您Listeners都是对事件(结果函数)的被动响应操作,所以您无法控制这些结果操作不产生事件。

您必须在拦截事件处理函数中更改布尔信号量变onTouch()量值(如或onScoll()或类似的东西)

于 2013-11-12T07:07:43.740 回答