0

我正在做一些 Android 编程,我想创建一个接受意图的可运行文件。我了解创建可运行文件的一般方法是:

Runnable R1 = new Runnable(){ 代码 };

我想要的是我的 runnable 接受一个意图作为参数或输入。然后,runnable 将意图用于其他目的。我想我会看起来像这样:

Runnable R1 = new Runnable(Intent i1){ Code };

我已经尝试过这个及其变体,但无法编译。我该怎么做呢?

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 回答