2012-10-24 29 views
6

Tôi muốn xóa hậu trường khi tôi bắt đầu Hoạt động mới.Làm cách nào để xóa hoàn toàn tác vụ và chỉ để lại hoạt động mới?

Trường hợp chính xác của sự cố của tôi như sau: Tôi có các hoạt động như thế này A> B> C> D> E "A" là hoạt động đăng ký và "B" là hoạt động đăng ký xác nhận. Tôi muốn rằng khi người dùng bắt đầu hoạt động "B" mà anh ta không thể quay lại hoạt động "A" nữa, cũng khi người dùng tiếp cận hoạt động "C", cả hoạt động "A" và "B" sẽ là vô dụng, tôi không cần người dùng quay lại với họ nữa.

Ngoài ra khi người dùng chuyển sang hoạt động "D" từ "C", anh ấy có thể quay lại "C" nhưng nếu anh chuyển sang hoạt động "E", anh ấy không thể quay lại bất kỳ "C" trước "hoặc" D "hoạt động.

Sau rất nhiều nghiên cứu, các tốt nhất mà tôi nhận được là sử dụng lá cờ: FLAG_ACTIVITY_NO_HISTORY, Nhưng nó có hai vấn đề đối với trường hợp của tôi:

  1. Tại hoạt động "A" nếu người dùng điều hướng đi từ ứng dụng của tôi (đối với ví dụ về màn hình chính), nó phá hủy hoạt động đó và do đó tất cả thông tin mà người dùng đã nhập bị mất!
  2. Hoạt động "C" Tôi muốn giữ nó trong lịch sử (backstack) nếu trong khi người dùng điều hướng đến hoạt động "D" nhưng khi người dùng chuyển sang hoạt động "E" tôi muốn xóa nó.

Tôi không thể tìm ra giải pháp cho vấn đề này cho đến bây giờ, tôi nghĩ sẽ dễ dàng hơn nếu có điều gì đó để xóa hậu trường của nhiệm vụ hiện tại!

Hỗ trợ SDK tối thiểu của tôi là 5.

Cảm ơn bạn trước.

+2

có thể trùng lặp: http://stackoverflow.com/questions/5794506/android-clear-the-back-stack Cũng đáng xem tại: http://developer.android.com/guide/components/tasks-and-back-stack.html# Đang xóa – jrajav

+0

Cũng tương tự như http://stackoverflow.com/questions/7121700/remove-all-activities-from-back-stack-while-calling-a-new-activity – speakingcode

Trả lời

8

Nếu bạn đang sử dụng API cấp 11 trở lên, bạn có thể chỉ cần thêm FLAG_ACTIVITY_CLEAR_TASK vào ý định của mình, thao tác này sẽ xóa tất cả các hoạt động khác trong công việc của bạn.

Nếu không, điều này có thể giúp: Clearing the full Android activity stack on older SDKs (that lack FLAG_ACTIVITY_CLEAR_TASK)

cách tiếp cận khác, sẽ cho bạn để hoàn thành các hoạt động mà bạn không còn muốn người dùng để có thể quay trở lại. Ví dụ, nếu bạn gọi ActivityA.finish() trước khi chuyển sang B, hoạt động sẽ bị xóa khỏi nhiệm vụ.

Khi bạn bắt đầu hoạt động D, bạn có thể bắt đầu sử dụng nó startActivityForResult() từ C, và khi bạn đóng D, gửi kết quả đến C, và sau đó kết thúc hoạt động C trước khi hướng đến E.

+0

Cảm ơn bạn rất nhiều vì đã trả lời, tôi đã áp dụng câu trả lời đầu tiên cách tiếp cận bằng cách gọi hàm "finish()" trên hoạt động trước khi bắt đầu hoạt động khác, và nó hoạt động rất tốt. Nhưng đối với phần thứ hai, hoạt động "C" bắt đầu hoạt động "D" và hoạt động "E" được mở bằng hoạt động "D" không phải "C". Vì vậy, tôi có thể chuyển một tham chiếu đến hoạt động "C" đến hoạt động "D" để tôi có thể phá hủy nó trước khi bắt đầu hoạt động "E"? – Elkfrawy

+1

Bạn không nên chuyển một tham chiếu. Những gì tôi đã cố gắng để nói là bạn có thể bắt đầu hoạt động "D" từ "C" bằng cách sử dụng phương thức startActivityForResult(). Khi bạn quyết định đi đến "E", đặt kết quả trong hoạt động "D", và sau đó kết thúc nó, mà sẽ gửi bạn đến "C", nơi bạn xác minh kết quả, và chuyển hướng người dùng đến "E", cũng kết thúc hoạt động "C".Đó là một chút phức tạp để giải thích, tôi hy vọng bạn nhận được nó. – kleinsenberg

+0

Ya, điều này rõ ràng, tôi đã áp dụng nó và nó hoạt động như tôi muốn. Cảm ơn sự giúp đỡ của bạn – Elkfrawy

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