0

互いに依存している 2 つのオブジェクトの 2 つのリスナーの「同期」に苦労しています。

と scrollable があるListView listとしLinearLayout sliderます。両方とも 内のレイアウトにありますFragment

リストをいくつかの項目にスクロールすると、スライダーはautoscroll対応する位置を表示する必要があります。スライダーをスクロールするsmoothScrollToPositionと、リストに対応する位置が表示されます。

したがって、私は

interface SliderListener {
    public onPositionChanged();
}

interface ListViewListener {
    public onListPositionChanged();
}

これらの 2 つのメソッドを共通のコントローラーに実装するだけでは (コントローラーに実装します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 に答える