现在我使用随机数作为请求代码。因此,每次我为 startActivityForResult 添加新活动时,我都需要检查所有其他此类活动以避免冲突。可能有任何定义价值的实践,不可碰撞的设计?你怎么看?
问问题
11014 次
3 回答
30
实际上,您不需要检查所有活动,如果您在不同活动中具有相同的值也没关系。
请求代码的想法是,您可以在 Activity X 中onActivityResult()
区分您开始使用的不同请求的结果startActivityForResult()
。
因此,如果您startActivityForResult()
的活动中有 3 个不同的调用,则需要 3 个不同的请求代码才能区分它们onActivityResult()
- 这样您就可以分辨出哪个结果属于哪个start。但是,如果你有另一个活动 Y,你正在做类似的事情,那么当请求代码与活动 X 中的相同时,这并不重要。
于 2012-11-01T16:24:15.910 回答
9
增加一个数字保证不会发生冲突(直到它换行)。除非您大量使用它们,否则实际上不应该发生。
您可以在项目中添加一个为您提供编号的类。例如
public class GlobalStuff {
private static final AtomicInteger seed = new AtomicInteger();
public static int getFreshInt() {
return seed.incrementAndGet();
}
}
现在在您的代码中,每当您需要使用数字而不是
public void doSomething() {
startActivityForResult(intentA, 342);
}
做它喜欢
private static final int REQUEST_CODE = GlobalStuff.getFreshInt();
public void doSomething() {
startActivityForResult(intentA, REQUEST_CODE);
}
并且您不会两次使用相同的号码是安全的。至少当代码在同一个进程中运行时。
唯一的问题是您不能在switch
语句中使用这些数字(如case REQUEST_CODE:
),因为 switch 需要在编译时已知的数字
于 2012-11-01T15:11:10.350 回答
9
如果您仍然需要检查活动的结果并且喜欢视觉上抛光的结构,请检查此方法。
在活动类中声明内部类:
class RequestCode {
static final int IMPORT = 100;
static final int WRITE_PERMISSION = 101;
}
开始活动时使用代码:
startActivityForResult(intent, RequestCode.IMPORT);
检查结果:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RequestCode.IMPORT && resultCode == RESULT_OK) {
//...
}
}
于 2017-04-13T12:23:58.513 回答