0

私はいくつかの Android プログラミングを行っており、インテントを受け入れる実行可能ファイルを作成したいと考えています。ランナブルを作成する一般的な方法は次のとおりであることを理解しています。

Runnable R1 = new Runnable(){ コード };

私が望むのは、ランナブルが意図をパラメーターまたは入力として受け入れることです。その後、ランナブルはインテンションを別のものに使用します。私は次のようになると思います:

Runnable R1 = new Runnable(Intent i1){ コード };

これとこれのバリエーションを試しましたが、コンパイルできません。どうすればいいですか?

4

2 に答える 2

2

パラメーターを受け入れるには、Runnable に準拠する新しいクラスを作成して、パラメーターをコンストラクターに渡す (およびコンストラクターで有効に使用する) ことができるようにする必要があります。匿名の Runnable オブジェクトで役立つ状態をキャプチャする別の方法はfinal、レキシカル スコープ内の変数にアクセスすることです。

新しいクラスと、パラメーターを受け取り、後で使用するために値を格納するコンストラクターを使用すると、次のようになります。

class RoadRunner implements Runnable {
   String acmeWidget;
   public RoadRunner (string acmeWidget) {
     this.acmeWidget = acmeWidget;
   }
   public void run () {
     evadeCleverPlan(acmeWidget);
   }
}

void doIt () {
  Runnable r = new RoadRunner("Fast Rocket");
  // do something with runnable
}

(内部クラスRoadRunnerの場合、つまり非静的なネストされたクラスの場合、外側の型のインスタンス メンバーにもアクセスできます。)

匿名の Runnable と「貧乏人の閉鎖」を使用すると、次のようになります。

void doItAnon () {
  final String acmeWidget = "TNT";
  Runnable r = new Runnable () {
    public void run () {
      evadeCleverPlan(acmeWidget);
    }
  };
  // do something with runnable
}

(匿名クラスは内部クラスであるため、この匿名 Runnableは、包含型のインスタンス メンバーにもアクセスできます。)

于 2013-05-06T23:48:52.557 に答える
0

これに対する答えは、Runnable が構築されるとき、または run が呼び出されるときに Intent を渡すかどうかによって異なります。前者のケースについては、user2246674 が優れた回答を提供しています。

ただし、後者を実行したい場合は、似ているRunnableがそうではないインターフェイスを作成する必要があります。

public interface RunnableWithIntent {
  void run(Intent intent);
}

次に、「実行可能な」インターフェースを次のようにインスタンス化します。

RunnableWithIntent r = new RunnableWithIntent() {
  public void run(Intent intent) {
    // do something with the intent
  }
};

そして、次のように呼び出します。

Intent intent = ...
r.run(intent);

このクラスは、通常の Runnable オブジェクトを使用する場所では使用できないことに注意してください。同様の使用パターンに従うだけです。

于 2013-05-07T00:04:15.567 に答える