2012-07-06 27 views
6

Tôi muốn thay đổi chồng trở lại trong ứng dụng Android của tôi như vậy:Modification của ngăn xếp trở lại trong Android

Ngay bây giờ, đây là dòng chảy:

A -> B -> C -> D -> E -> F

Tôi muốn có thể sửa đổi ngăn xếp lưng, để khi người dùng đi đến hoạt động F, D và E sẽ bị xóa khỏi ngăn xếp. do đó, dòng chảy là F -> C nếu người dùng truy cập lại.

Ngoài ra, từ F, người dùng có thể truy cập hoạt động B, điều này cũng sẽ xóa C, D, E và F.

Tôi đã thấy một số thông tin về việc có thể xóa ngăn xếp hoặc xóa mục trên cùng nhưng tôi muốn xóa một số mục khỏi ngăn xếp, khi một hoạt động được kích hoạt.

Bất kỳ trợ giúp nào được đánh giá cao, cảm ơn rất nhiều.

Trả lời

9

Bạn có thể xây dựng ý định với cờ intent.FLAG_ACTIVITY_CLEAR_TOP từ F đến C. Sau đó, bạn sẽ phải gọi hàm startActivity() với mục đích và kích hoạt điều này xảy ra trênBackPressed hoặc một cái gì đó tương tự.

Intent i = new Intent(this, C.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); 
startActivity(i) 

Xem câu trả lời này, mà còn giao dịch với đảm bảo rằng C sẽ không được khởi động lại khi bạn điều hướng trở lại với nó: https://stackoverflow.com/a/11347608/1003511

FLAG_ACTIVITY_CLEAR_TOP sẽ làm là đi quay trở lại với ví dụ gần đây nhất của hoạt động C trên ngăn xếp và sau đó xóa mọi thứ ở trên nó. Tuy nhiên, điều này có thể khiến hoạt động được tạo lại. Nếu bạn muốn đảm bảo nó sẽ là cùng một hoạt động của hoạt động, hãy sử dụng FLAG_ACTIVITY_SINGLE_TOP. Từ các tài liệu:

hiện đang chạy trường hợp 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 phương pháp onNewIntent() của nó, hoặc là tự kết thúc và khởi động lại với mới ý định. Nếu nó đã tuyên bố chế độ khởi chạy của nó là "nhiều" (mặc định là ) và bạn chưa đặt FLAG_ACTIVITY_SINGLE_TOP trong cùng một mục đích , thì nó sẽ được hoàn thành 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 thì Intent này sẽ là được gửi đến onNewIntent() của cá thể hiện tại.

Edit: Đây là một mẫu mã tương tự như những gì bạn muốn làm:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     Intent a = new Intent(this, C.class); 
     a.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     startActivity(a); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

mã nguồn mẫu: https://stackoverflow.com/a/9398171/1003511

+0

Điều này thật hoàn hảo. Cảm ơn bạn rất nhiều vì sự giúp đỡ. – mwrazam

2

Những gì bạn cần là android:excludeFromRecents="true" phải được thêm vào thẻ Hoạt động trong tệp kê khai. Nó dừng tất cả các hoạt động để đi vào ngăn xếp có thẻ này vào thẻ Hoạt động trong tệp kê khai.

Ví dụ mã

<activity 
      android:name="com.xx.xx.ActivityName" 
      android:excludeFromRecents="true" 


     </activity> 

và chắc chắn rằng bạn gọi finish() (sau khi bắt đầu một hoạt động) phương pháp trong những hoạt động bạn không muốn trở thành hoạt động trên stack.

+0

Xin chào, điều này sẽ làm cho hoạt động này hoàn toàn biến mất khỏi lịch sử mà isn tôi muốn gì Tôi muốn các hoạt động biến mất chỉ sau khi một hoạt động khác đã bị sa thải. Cảm ơn sự giúp đỡ của bạn! – mwrazam

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