Android中是否有针对请求代码值的建议?

时间:2012-11-01 14:28:16

标签: android

现在我使用随机数作为请求代码。因此,每次我为startActivityForResult添加新活动时,我都需要检查所有其他此类活动以避免冲突。可能有任何定义值的做法,不可设计的可碰撞? 你觉得怎么样?

3 个答案:

答案 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) {
        //...
    }
}