我正在做一些Android编程,我想创建一个接受意图的runnable。我知道创建runnable的一般方法是:
Runnable R1 = new Runnable(){ 代码的 };
我想要的是我的runnable接受意图作为参数或输入。然后,runnable使用其他东西的意图。我想我会看起来像这样:
Runnable R1 = new Runnable(Intent i1){ 代码的 };
我已经尝试了这个以及它的变体并且无法将其编译。我该怎么做?
答案 0 :(得分: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
是inner class - 这是一个非静态嵌套类 - 它还可以访问封闭类型的实例成员。)
匿名的Runnable和一个可怜的男人关闭":
void doItAnon () {
final String acmeWidget = "TNT";
Runnable r = new Runnable () {
public void run () {
evadeCleverPlan(acmeWidget);
}
};
// do something with runnable
}
(这个匿名的Runnable可以也访问包含类型为anonymous classes的实例成员是内部类。)
答案 1 :(得分:0)
答案取决于您是否要在构造Runnable时传入Intent,或者在调用run时传递Intent。对于前一种情况,user2246674提供了一个很好的答案。
但是,如果您想要执行后者,则需要创建一个看起来类似于Runnable
的界面,但不是。
public interface RunnableWithIntent {
void run(Intent intent);
}
然后您将实例化“runnable”界面,如下所示:
RunnableWithIntent r = new RunnableWithIntent() {
public void run(Intent intent) {
// do something with the intent
}
};
并称之为:
Intent intent = ...
r.run(intent);
请注意,此类不能在任何使用常规Runnable对象的地方使用。它只遵循类似的使用模式。