0

まず、私はAndroidプログラミングの初心者です。Javaの基礎を学び、SOを調べて、問題をグーグルで検索しました。私は次のチュートリアルを数時間機能させようとしています。プロジェクトは、アクティビティと、を拡張するクラスSwipeDetectorの2つのクラスで構成されていますSimpleOnGestureListener

MotorolaのWebサイトで提供されているソリューションは機能しますが、左または右のスワイプが検出されたときにアクティビティを「変更」しようとすると問題が発生しました。それをテストするために、スワイプしたときにいくつかのトーストが表示されることを期待しました。

ActivityClass私の「解決策」は、パラメーターとしてとContextを呼び出すSwipeDetectorのコンストラクターを作成することでしたActivity。これらの情報がわかっている場合mParent.moveScreenRight();は、mParentが親アクティビティである場所を簡単に呼び出すことができます。

私はこの解決策がひどいように思われることを知っています、そして私はここでいくつかのアドバイスを得ることができると思います。必要に応じて、2つのクラスの実装に関する詳細情報を提供できます。

ありがとう !

よろしく、ジェローム

4

2 に答える 2

0

説明から問題が正確に何であるかは明らかではありませんが、行間を読んでチュートリアルを見ると、チュートリアルのSwipeDetectorがアクティビティの内部クラスであることがわかりません。これが、Activityクラスのメンバーを呼び出すmoveScreenRight()ormoveSreenLeft()を呼び出すことができる唯一の方法です。mFlipper

したがって、コードは次のようになります。

public class MyActivity extends Activity {

  // All the Activity overrides elided

  class SwipeDetector extends SimpleGestureListener {

    // all the SwipeDetector methods
  }
}

SwipeDetectorを内部クラスにすることを除けば、Activityでメソッドを呼び出すことができるように、コンストラクターへの参照を渡すことを避けられません。それを抽象化する最もクリーンな方法は、JosephEarlによって提案されたインターフェイスソリューションを使用することです。

于 2011-03-24T15:48:33.713 に答える
0

ジェスチャ検出器にインターフェイスを使用させることができるため、さまざまなアクティビティを渡すことができます。

interface MovableActivity {

    public void moveLeft();
    public void moveRight();
}

次に、実際のアクティビティでimplementMovableActivity

class MyActivity extends Activity implements MovableActivity { ...

次に、スワイプ検出器のコンストラクターは、を取り、それMovableActivityを呼び出すことができます。moveLeftmoveRight

于 2011-03-24T15:19:45.510 に答える