Android中有没有对请求码值的build议?

现在我正在使用请求代码的随机数字。 所以,每当我为startActivityForResult添加新的活动,我需要检查所有其他这样的活动,以避免冲突。 可能有定义价值的任何做法,不可能通过devise碰撞? 你怎么看?

Related of "Android中有没有对请求码值的build议?"

如果你仍然需要检查一个活动的结果,并像视觉抛光结构,请检查这种方法。

在活动类中声明内部类:

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

其实你不需要检查你所有的活动,如果你在不同的活动中有相同的值,那也没关系。

请求代码的想法是,您在Activity X中的onActivityResult()可以区分使用startActivityForResult()启动的不同请求的结果。

因此,如果您的活动中有3个不同的startActivityForResult()调用,您将需要3个不同的请求代码,以便能够在onActivityResult()区分它们 – 因此您可以知道哪个结果属于哪个启动 。 但是如果你有另外一个活动Y,你在做类似的事情,那么当活动X中的请求代码是相同的时候,这并不重要。

增加一个数字是保证是免费的(直到它包装)。 除非你用了很多,否则实际上不应该发生。

你可以添加一个类到你的项目,给你的号码。 例如

 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); } 

而且你可以安全的使用两次相同的号码。 至less在代码在相同的进程中运行。

唯一的问题是你不能在switch语句中使用这些数字(如case REQUEST_CODE:因为开关需要编译时已知的数字