现在我使用随机数作为请求代码。因此,每次我为startActivityForResult添加新活动时,我都需要检查所有其他此类活动以避免冲突。可能有任何定义值的做法,不可设计的可碰撞? 你觉得怎么样?
答案 0 :(得分:17)
实际上,您不需要检查所有活动,如果您在不同活动中拥有相同的值,则无关紧要。
请求代码的想法是,您在活动X的onActivityResult()
中可以区分以startActivityForResult()
开头的不同请求的结果。
因此,如果您的活动中有3个不同的startActivityForResult()
来电,那么您需要3个不同的请求代码才能在onActivityResult()
中区分它们 - 这样您就可以知道哪个结果属于 start 。但是如果你有另一个活动Y你正在做类似的事情,那么当活动X中的请求代码与活动X相同时无关紧要。
答案 1 :(得分:8)
增加一个数字保证是无冲突的(直到它包装)。实际应该 除非你使用很多它们,否则不会发生。
您可以在项目中添加一个为您提供编号的课程。例如
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需要在编译时已知的数字
答案 2 :(得分:5)
如果您仍然需要检查活动的结果并且喜欢视觉上抛光的结构,请检查此方法。
声明活动类中的内部类:
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) {
//...
}
}