2012-11-01 25 views
14

Bây giờ tôi đang sử dụng số ngẫu nhiên cho mã yêu cầu. Vì vậy, mỗi khi tôi thêm hoạt động mới cho startActivityForResult tôi cần phải kiểm tra tất cả các hoạt động khác để tránh va chạm. Có thể có bất kỳ thực hành nào để xác định giá trị, không thể va chạm theo thiết kế? Bạn nghĩ sao?Có đề xuất nào cho các giá trị mã yêu cầu trong Android không?

+3

tôi chỉ sử dụng số ngẫu nhiên (được tạo ra tại thời gian biên dịch) và không bao giờ có bất kỳ vấn đề nào - nhưng đây là một câu hỏi hay. – Booger

Trả lời

3

Nếu bạn vẫn cần kiểm tra kết quả của một hoạt động và muốn các cấu trúc được đánh bóng trực quan, vui lòng kiểm tra phương pháp này.

Khai báo lớp nội bộ bên trong lớp hoạt động của bạn:

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

Sử dụng mã khi bắt đầu hoạt động:

startActivityForResult(intent, RequestCode.IMPORT); 

Kiểm tra kết quả:

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

tăng số được đảm bảo là không bị va chạm (cho đến khi nó kết thúc tốt đẹp). Nên thực sự không xảy ra trừ khi bạn sử dụng nhiều.

Bạn có thể thêm lớp vào dự án cung cấp cho bạn số. Ví dụ

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

Bây giờ trong mã của bạn, bất cứ khi nào bạn cần sử dụng một số thay vì

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

làm điều đó như

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

và bạn được an toàn mà bạn không sử dụng cùng một số hai lần. Ít nhất trong khi mã chạy trong cùng một Quy trình.

Vấn đề duy nhất là bạn không thể sử dụng những con số trong một tuyên bố switch (như trong case REQUEST_CODE:) vì chuyển đổi cần số được biết tại thời gian biên dịch

+0

Bạn có thể sử dụng nó trong một câu lệnh switch với sự trợ giúp của một hashmap toàn cục, có lẽ? – creitve

+0

Cách tiếp cận này hoạt động tuyệt vời .. cho đến khi thư viện của bên thứ ba quyết định làm điều tương tự. –

10

Trên thực tế bạn không cần phải kiểm tra tất cả các bạn Các hoạt động và nó không quan trọng nhiều nếu bạn có cùng giá trị trong các Hoạt động khác nhau.

Ý tưởng cho mã yêu cầu là bạn, trong Hoạt động X, trong onActivityResult() có thể phân biệt kết quả của các yêu cầu khác nhau mà bạn đã bắt đầu với startActivityForResult().

Vì vậy, nếu bạn có 3 startActivityForResult() cuộc gọi khác nhau trong hoạt động của bạn, bạn sẽ cần 3 mã yêu cầu khác nhau để có thể phân biệt giữa chúng trong onActivityResult() - vì vậy bạn có thể biết được kết quả thuộc mà bắt đầu . Nhưng nếu bạn có một Hoạt động Y khác nơi bạn đang làm điều gì đó tương tự, không quan trọng khi mã yêu cầu có giống như trong Hoạt động X.

Các vấn đề liên quan