2012-11-01 9 views
14

Teraz używam liczb losowych do kodów żądań. Tak więc za każdym razem, gdy dodaję nową aktywność do startActivityForResult, muszę sprawdzić wszystkie inne takie działania, aby uniknąć kolizji. Czy mogą istnieć jakieś praktyki definiowania wartości, których nie można kolidować z projektem? Co myślisz?Czy są jakieś zalecenia dotyczące wartości kodów żądań w systemie Android?

+3

wystarczy użyć liczb losowych (wygenerowany podczas kompilacji) i nigdy nie miał problemów - ale jest to dobre pytanie. – Booger

Odpowiedz

3

Jeśli nadal musisz sprawdzić wynik działania i podoba Ci się wizualnie wypolerowane struktury proszę sprawdzić tę metodę.

zadeklarować klasę wewnętrzną wewnątrz klasy działalności:

class RequestCode { 
    static final int IMPORT = 100; 
    static final int WRITE_PERMISSION = 101; 
} 

użyć kodu przy uruchamianiu działalności:

startActivityForResult(intent, RequestCode.IMPORT); 

Sprawdź rezultat:

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == RequestCode.IMPORT && resultCode == RESULT_OK) { 
     //... 
    } 
} 
9

Zwiększanie liczby gwarantuje brak kolizji (do momentu zawinięcia). Naprawdę nie powinno się dziać, chyba że użyjesz ich dużo.

Możesz dodać klasę do projektu, która daje Ci numer. Na przykład

public class GlobalStuff { 
    private static final AtomicInteger seed = new AtomicInteger(); 
    public static int getFreshInt() { 
     return seed.incrementAndGet(); 
    } 
} 

Teraz w kodzie, gdy trzeba użyć numeru zamiast

public void doSomething() { 
    startActivityForResult(intentA, 342); 
} 

zrobić jak

private static final int REQUEST_CODE = GlobalStuff.getFreshInt(); 
public void doSomething() { 
    startActivityForResult(intentA, REQUEST_CODE); 
} 

i jesteś bezpieczny, że nie używasz ten sam numer dwa razy. Przynajmniej podczas gdy kod działa w tym samym procesie.

Jedynym problemem jest to, że nie można używać tych numerów w switch oświadczenia (jak w case REQUEST_CODE:), ponieważ przełącznik musi numery, które są znane w czasie kompilacji

+0

Możesz go użyć w instrukcji switch przy pomocy globalnej mapy? – creitve

+0

To podejście działa świetnie, dopóki biblioteka stron trzecich nie zdecyduje się zrobić czegoś podobnego. –

10

Właściwie nie trzeba sprawdzić wszystkie Działania i to nie ma większego znaczenia, jeśli masz te same wartości w różnych Działaniach.

Ideą kodów zgłoszeń jest to, że w swojej Działalności X w onActivityResult() można rozróżnić wyniki różnych próśb rozpoczętych pod numerem startActivityForResult().

Więc jeśli masz 3 różne startActivityForResult() połączeń w swojej działalności, musisz 3 różne kody żądania, aby być w stanie ich odróżnić w onActivityResult() - tak można powiedzieć, który wynik należący do którego rozpocząć . Ale jeśli masz inne działanie Y, gdy robisz coś podobnego, to nie ma znaczenia, kiedy kody zgłoszeń są takie same jak w Aktywności X.

Powiązane problemy