2010-03-17 21 views
7

Trong ứng dụng của tôi, bạn có thể điều hướng thông qua một số Hoạt động cho đến khi chồng Hoạt động khá sâu.Đóng một số hoạt động android đồng thời

Chúng tôi muốn một nút trên mọi Hoạt động sẽ đưa bạn quay trở lại menu chính - tức là bật tất cả Hoạt động khỏi ngăn xếp trừ trường hợp đầu tiên.

Tôi đã đặt nút trong Chế độ xem mà tôi có thể dễ dàng đặt trên mọi Hoạt động trong ứng dụng, nhưng tôi không thể tìm ra cách đóng một số Hoạt động trong một lần giảm.

(Nếu có thể, nó sẽ là tốt nếu View có thể làm việc ra bao nhiêu hoạt động để đóng bởi chính nó -. Tức là phát hiện cách sâu trên stack Hoạt động riêng của nó là)

Trả lời

16

Hãy nhìn vào lá cờ ý FLAG_ACTIVITY_CLEAR_TOP cho biết nó mang hoạt động được nhắm mục tiêu lên đầu ngăn xếp, xóa mọi thứ khác có thể đã ở trên nó. Vì vậy, sử dụng nút đó bạn có thể thêm vào tất cả các hoạt động của mình để khởi chạy một mục đích nhắm vào menu chính của bạn, với bộ cờ đó.

Từ các tài liệu:

Nếu thiết lập, và các hoạt động là đưa ra vẫn đang chạy trong nhiệm vụ hiện tại, sau đó thay vì tung ra một ví dụ mới về điều đó hoạt động, tất cả các hoạt động khác trên đầu trang sẽ bị đóng và Ý định này sẽ được gửi đến (hiện tại trên đầu trang) hoạt động cũ như là một Mục đích mới.

Ví dụ, hãy xem xét một nhiệm vụ bao gồm các hoạt động: A, B, C, D. Nếu D gọi startActivity() với Intent mà giải quyết với thành phần hoạt động B, sau đó C và D sẽ được thành và B nhận được sự trao ý định, kết quả trong ngăn xếp tại phúc: A, B.

các ví dụ đang chạy của hoạt động B trong ví dụ trên sẽ hoặc nhận mục đích mới, bạn đang bắt đầu ở đây trong onNewIntent() của nó hoặc tự hoàn thành và khởi động lại với mục đích mới. Nếu nó đã tuyên bố chế độ khởi chạy là "nhiều" (mặc định) và bạn có không đặt FLAG_ACTIVITY_SINGLE_TOP trong cùng ý định, thì sẽ là hoàn tất và được tạo lại; cho tất cả các chế độ khởi chạy khác hoặc nếu FLAG_ACTIVITY_SINGLE_TOP được đặt sau đó Mục đích này sẽ được gửi đến hiện tại của onNewIntent().

chế độ ra mắt này cũng có thể được sử dụng để hiệu quả tốt kết hợp với FLAG_ACTIVITY_NEW_TASK: nếu sử dụng để bắt đầu hoạt động thư mục gốc của một nhiệm vụ, nó sẽ mang lại bất kỳ hiện đang chạy thể hiện của nhiệm vụ đó đến foreground, và sau đó xóa nó sang trạng thái gốc . Điều này đặc biệt hữu ích, ví dụ: khi khởi chạy hoạt động từ trình quản lý thông báo .

+0

Sẽ làm - chỉ muốn chắc chắn rằng nó hoàn toàn đúng trước tiên: Tôi đã bị một trong số đó trước ... – teedyay

+1

Thật vậy - điều này có hiệu quả mong muốn đối với tôi: intent.SetFlags (ActivityFlags.ClearTop | ActivityFlags.SingleTop); – scolestock

-1

Bạn có thể khai báo hoạt động đầu tiên android:launchMode="singleTask" (more) và sau đó chỉ cần bắt đầu bằng Intent.

CHỈNH SỬA: Đề xuất của tôi dựa trên giả định rằng bạn muốn có một phiên bản Hoạt động để trở về. Nếu không thì không chính xác.

+1

Gợi ý sử dụng singleTask ở đây cho biết không hiểu singleTask nào làm được ... không sao, nó gây nhầm lẫn, và nó có rất nhiều ảnh hưởng đến hành vi của hoạt động. Vì vậy, trừ khi bạn hiểu và muốn tất cả mọi thứ nó làm cho bạn, xin vui lòng tránh nó. 99% ứng dụng chỉ cần sử dụng chế độ khởi chạy bình thường hoặc đôi khi singleTop. – hackbod

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