2011-02-11 30 views
8

Ngăn xếp hoạt động của tôi là A B C, với C ở trên cùng. B bắt đầu bằng startActivityForResult().FLAG_ACTIVITY_CLEAR_TOP và onActivityResult

Bây giờ, trong C, nó bắt đầu A và xóa hàng đầu bằng cách sử dụng đoạn mã sau:

 finish(); 

     intent = new Intent(this, A.class); 
     intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(intent); 

Câu hỏi của tôi là, sẽ onActivityResult() A được gọi sau khi đoạn mã trên được thực hiện? Tôi mong đợi nó sẽ, bởi vì B bị phá hủy sau khi C bắt đầu A và xóa đầu. Nhưng, mã thử nghiệm của tôi cho thấy rằng onActivityResult() trong A không được gọi. Tôi bị bối rối. Ai đó có thể giúp đỡ?

Cảm ơn.

+0

Kai, tài liệu cho CLEAR_TOP nói "tất cả các hoạt động khác trên đầu trang sẽ bị đóng và Mục đích này sẽ được gửi đến hoạt động cũ (hiện tại trên đầu) như là một ý định mới. " Tuy nhiên, tôi nghi ngờ rằng "đóng" là một sự lựa chọn nghèo của các từ trong tài liệu .. Android thường không 'đóng' Hoạt động trừ khi bộ nhớ yêu cầu nó hoặc họ gọi kết thúc(). Điều này có thể yêu cầu một số thử nghiệm .. Tôi quan tâm đến việc thấy những gì bạn tìm thấy. – DJC

Trả lời

3

Trong mã của bạn, bạn đang bắt đầu Hoạt động A mới, từ ACTIVITY C. Thao tác này sẽ không gọi hàm onActivityResult. Điều này đơn giản chỉ vì một hoạt động mới A được bắt đầu. onActivityResult() sẽ chỉ được gọi khi bạn kết thúc() Acitivity B.

Tôi hy vọng một người nào đó sẽ thêm nhiều hơn vào anwsers, nếu điều này không làm cho nó rõ ràng.

+0

onActivityResult() sẽ được "Gọi khi một hoạt động bạn khởi chạy thoát, cung cấp cho bạn mã requestCode bạn đã bắt đầu, kết quả được trả về và bất kỳ dữ liệu bổ sung nào từ nó. ResultCode sẽ được RESULT_CANCELED nếu hoạt động trả về một cách rõ ràng, didn ' t trả về bất kỳ kết quả nào, hoặc bị rơi trong quá trình hoạt động của nó. "Tài liệu không nói onActivityResult() phụ thuộc vào kết thúc(). – Kai

+0

thực tế bạn có thể thoát khỏi hoạt động bằng cách gọi kết thúc(). Và đó là ý nghĩa của tài liệu khi tôi hiểu. Và gọi Hoạt động A từ Hoạt động C với CLEAR TOP sẽ tạo lại Hoạt động A trừ khi hoạt động của bạn A có nút khởi chạy được đặt thành SINGLE TOP. Vì vậy, tôi nghĩ rằng những gì bạn muốn là không posiible .. Và xin cập nhật nếu u tìm thấy một giải pháp này. cảm ơn – Varun

0

cố gắng đặt launchMode hoạt động A của bạn thành giá trị "singleTask" hoặc sử dụng cờ FLAG_ACTIVITY_CLEAR_TOP kết hợp với FLAG_ACTIVITY_NEW_TASK. theo mặc định, Mã khởi chạy của Activity A là chuẩn, khi đó một phiên bản mới của A sẽ được tạo khi bạn bắt đầu A từ C.

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