我正在做一些 Android 编程,我想创建一个接受意图的可运行文件。我了解创建可运行文件的一般方法是:
Runnable R1 = new Runnable(){ 代码 };
我想要的是我的 runnable 接受一个意图作为参数或输入。然后,runnable 将意图用于其他目的。我想我会看起来像这样:
Runnable R1 = new Runnable(Intent i1){ Code };
我已经尝试过这个及其变体,但无法编译。我该怎么做呢?
我正在做一些 Android 编程,我想创建一个接受意图的可运行文件。我了解创建可运行文件的一般方法是:
Runnable R1 = new Runnable(){ 代码 };
我想要的是我的 runnable 接受一个意图作为参数或输入。然后,runnable 将意图用于其他目的。我想我会看起来像这样:
Runnable R1 = new Runnable(Intent i1){ Code };
我已经尝试过这个及其变体,但无法编译。我该怎么做呢?
要接受参数,必须创建一个符合 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 也可以访问包含类型的实例成员,因为匿名类是内部类。)
这个问题的答案取决于您是想在构造 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 对象的地方。它只是遵循类似的使用模式。