3

OnTouchListener を実装する 2 つの異なるオブジェクトがあります。

1 つはイベント データを使用して一部の内部データを変更し、もう 1 つは UI を更新します。

問題は、同じビューをリッスンするように両方を設定すると、一方だけが OnTouch イベントを処理し、もう一方の OnTouch 関数が呼び出されないことです。

OnTouch 関数が true を返した場合、それはイベントが処理されたことを意味しますが、False を返した場合、正しく動作しないことを読みました。

したがって、質問は次のとおりです。

2 つ以上のリスナー オブジェクトをビューから同じ OnTouch イベントに設定し、それらすべてがそれらすべてのイベントを受信できるようにするにはどうすればよいですか?

4

4 に答える 4

4

1 つのリスナーに両方のオブジェクトのメソッドを呼び出させるだけです。

Object uiModifier;
Object internalDataModifier;
//ensure these Objects are initialized

myView.setOnClickListener(new OnTouchListener() {
    @Override
    public boolean onTouchListener(View v, MotionEvent event)
    {
        internalDataModifier.handleTouch(v, event);
        uiModifier.handleTouch(v, event);
        return true;
    }

}

と の両方internalDataModifierにメソッドuiModifierがあることを確認します。handleTouch(View, MotionEvent)

于 2012-10-28T19:27:51.707 に答える
0

リスナーが UI アクティビティのみを指すようにして、そのアクティビティから内部データを更新しているものを呼び出すことができないのはなぜですか? 同じイベントに 2 つのイベント リスナーが応答することは、たとえ可能であっても (私には疑問です)、良い考えではないと思います。誰かが 2 つの UI アクティビティを 1 つのイベントに応答させようとした場合、衝突が発生することを想像してください。

于 2012-10-28T19:15:25.900 に答える
0

これに対する私の回避策は、extendSimpleOnGestureListenerと implement を1 つのクラスだけにすることでしたOnTouchListener。1 つのクラスが拡張SimpleOnGestureListenerされ、もう 1 つのクラスが実装されOnTouchListenerていましたが、両方ともタッチ イベントを処理していました。

次に、小さいクラスのすべてのコード (コードの行数) を大きいクラスに移動し、実装で大きいクラスを呼び出したところ、機能しました。次に、クラスを次のように宣言しました

    public class MyOnlyListener extends SimpleOnGestureListener implements OnTouchListener

参考までに、1 つのクラスを使用して画像をパンズーム(より大きなクラス) し、もう 1 つのクラスを使用してビューの次のページにスワイプしました。

于 2013-07-26T15:17:18.667 に答える