2012-11-01 41 views
14

現在我正在使用隨機數請求代碼。因此,每次我爲startActivityForResult添加新活動時,都需要檢查所有其他此類活動以避免衝突。可能有定義價值的任何做法,不可能通過設計碰撞? 你覺得呢?Android中是否有任何有關請求碼值的建議?

+3

我只是使用隨機數(在編譯時生成),並且從來沒有任何問題 - 但這是一個很好的問題。 – Booger

回答

3

同樣重要,如果你仍然需要檢查的活動和結果一樣視覺拋光結構請檢查此方法。開始活動時

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) { 
     //... 
    } 
} 
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:),因爲交換機需要那些在編譯時已知數

+0

您可以在全局散列映射幫助下在switch語句中使用它,可能嗎? – creitve

+0

這種方法效果很好..直到第三方圖書館決定做類似的事情。 –

10

其實你並不需要檢查所有如果您在不同的活動中擁有相同的值,則活動並不重要。

請求代碼的想法是,您在活動X中onActivityResult()可以區分開始於startActivityForResult()的不同請求的結果。

所以,如果你在你活動的3次不同的startActivityForResult()通話,就需要3個不同的請求代碼,以便能夠在onActivityResult()區分它們 - 這樣你就可以知道哪些結果屬於哪個開始 。但是,如果您有其他活動Y其中你在做類似的東西,它不會當請求代碼有像在活動X.

相關問題