2012-12-26 17 views
7

Tôi hoàn toàn đồng ý với Navigation dướiCách thích hợp để xử lý "Up" Navigation theo hướng dẫn

enter image description here

Hãy tưởng tượng rằng chi tiết Sách được thực hiện trong các trường hợp khác nhau của một BookDetailActivity.

Các ngăn xếp trước khi nhấn lên một cách chi tiết book2 là:

  • BookDetailActivity (Book 2 - Bạn đang ở đây)
  • BookDetailActivity (Tập 1)
  • AllBooksActivity

Nếu tôi làm theo số guidelines Tôi sẽ sử dụng:

Nhưng vấn đề lớn với mã này là BookDetailActivity (Sách 1) vẫn còn sống!

Nhấn lại nút sau khi "lên" sẽ mang lại cho các chi tiết của Sách 1.

Làm thế nào tôi có thể giết chết tất cả các BookDetailActivity mà là giữa bản gốc AllBooksActivity và hoạt động nơi tôi ép lên?

+0

bạn có cân nhắc sử dụng các đoạn thay vì hoạt động không? –

+0

Tôi cần một Hoạt động khác vì tôi muốn hoạt ảnh (nếu được bật trên thiết bị người dùng) để tạo "Cửa sổ" mới và chuyển tiếp giữa toàn bộ màn hình –

+0

theo như tôi biết, bạn có thể chuyển đổi giữa các đoạn: http: // developer. android.com/reference/android/app/FragmentTransaction.html#setCustomAnimations(int, int, int, int) –

Trả lời

5

Các related guidelines article lưu ý những điều sau:

thực hiện Lưu ý: Là một thực hành tốt nhất, khi thực hiện một trong hai chủ hoặc Up, hãy chắc chắn để xóa trở lại ngăn xếp của bất kỳ màn hình con cháu nào. Đối với Trang chủ, màn hình còn lại duy nhất trên ngăn xếp lưng phải là màn hình chính . Đối với điều hướng Lên, màn hình hiện tại sẽ bị xóa khỏi ngăn xếp lùi, trừ khi Quay lại điều hướng trên các cấu trúc phân cấp màn hình. Bạn có thể sử dụng các cờ ý định FLAG_ACTIVITY_CLEAR_TOP và FLAG_ACTIVITY_NEW_TASK cùng nhau để đạt được điều này.

Vì bạn đang làm điều đó, nên BookDetailActivity1 phải đóng bởi FLAG_ACTIVITY_CLEAR_TOP.Cách duy nhất nếu nó có thể được sống và hiển thị trên cách nhấn Back là nếu nó đã được bắt đầu trước khi AllBooksActivity.

Đối với không cần FLAG_ACTIVITY_NEW_TASK (được đề xuất bởi nhà phát triển Android 's câu trả lời):

Khi sử dụng lá cờ này, nếu một nhiệm vụ đang chạy cho hoạt động này bạn bây giờ đang bắt đầu, sau đó mới hoạt động sẽ không được bắt đầu; thay vào đó, nhiệm vụ hiện tại sẽ chỉ đơn giản là được đưa đến mặt trước của màn hình với trạng thái đó là cuối cùng trong.

... vì vậy nếu hoạt động của bạn tồn tại, nó sẽ không bắt đầu một nhiệm vụ mới.

+0

Theo như cờ nhiệm vụ mới, nhận xét của bạn có thể đúng nhưng tại sao thêm cờ ở vị trí đầu tiên? Nó không có vẻ như là một nhiệm vụ mới đối với tôi. – kabuko

+0

Có thể không cần thiết trong mọi trường hợp. Nhưng nếu người dùng có thể khởi chạy BookDetailsActivity từ bên ngoài ứng dụng (từ một thông báo, bằng cách quét mã vv), điều đó có ý nghĩa. Xem ví dụ cuối cùng (Điều hướng giữa các ứng dụng để chia sẻ hỗ trợ) trong bài viết này: http://developer.android.com/design/patterns/navigation.html –

1

ok, có nhiều cách để thực hiện việc như vậy. đây là một trong số họ:

tuy nhiên, tôi khuyên bạn nên thay vì mở hoạt động đầu tiên như thể đây là một hoạt động mới, chỉ cần hoàn thành hoạt động hiện tại và một hoạt động trước đó.

để thực hiện, hãy gọi từng hoạt động mới với startActivityForResult và đặt kết quả cho từng hoạt động thành một số giá trị cho biết bạn muốn quay lại hoạt động đầu tiên.

bạn thậm chí có thể đặt giá trị thành tên chuẩn của lớp và tạo hoạt động cơ sở sẽ tự động xử lý tất cả các yêu cầu đó để bạn không cần xử lý.

trong mọi trường hợp, tôi nghĩ bạn đã nhầm lẫn bằng cách sử dụng Intent.FLAG_ACTIVITY_NEW_TASK vì nó tạo một tác vụ mới, vì vậy thao tác trước đó vẫn tồn tại. cố gắng đọc các intents cờ có sẵn để biết thêm thông tin: http://developer.android.com/reference/android/content/Intent.html

+0

+1 vì không cần 'FLAG_ACTIVITY_NEW_TASK' – Geobits

+0

vậy bây giờ nó hoạt động tốt? –

+0

Âm thanh như blog deverloper không chính xác: http://developer.android.com/training/implementing-navigation/ancestral.html –

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