2012-11-01 10 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); 
} 

のようにそれを行うと、あなたが使用しないことを安全です同じ数字が2回あります。少なくともコードは同じプロセスで実行されます。

唯一の問題は、スイッチがコンパイル時に知られている数字を必要とするため、実際

+0

グローバルハッシュマップの助けを借りてswitch文で使用できますか? – creitve

+0

このアプローチは、第三者のライブラリが類似のことをするまでは素晴らしいことです。 –

10

あなたがチェックする必要はありませんあなたは(case REQUEST_CODE:のように)switch文の中で、これらの数字を使用できないということであるすべてのあなたアクティビティとは、異なるアクティビティで同じ値を持っていれば大したことではありません。

リクエストコードの考え方は、アクティビティXのonActivityResult()にあるstartActivityForResult()で開始したさまざまなリクエストの結果を区別できるということです。

あなたの活動の3本の異なるstartActivityForResult()電話を持っているのであれば、あなたはonActivityResult()でそれらを区別することができるようにするために、3種類の要求コードが必要になります - あなたはどのを開始に属している結果伝えることができるので、 。しかし、あなたが何か同様のことをやっている別のアクティビティYがある場合、アクティビティXのようなリクエストコードがいつあるかは関係ありません。

関連する問題