8

Ứng dụng của tôi có nhiều đoạn và hoạt động. Trong suốt vòng đời của hoạt động chính của phụ huynh, ứng dụng trình bày thông tin/tùy chọn cho người dùng trong các hoạt động khác.Làm cách nào để bạn xử lý các giao dịch phân đoạn khi trạng thái của hoạt động gốc nhất định được lưu?

Các tài liệu cho mảnh vỡ có sau quy định đối với cam kết():

Chú ý: Bạn có thể cam kết một giao dịch sử dụng cam kết() chỉ trước khi các hoạt động tiết kiệm trạng thái của nó (khi người dùng rời khỏi hoạt động) . Nếu bạn cố gắng cam kết sau thời điểm đó, một ngoại lệ sẽ được ném. Điều này là do trạng thái sau khi cam kết có thể bị mất nếu hoạt động cần được khôi phục. Đối với các tình huống trong đó nó không sao mà bạn mất cam kết, sử dụng commitAllowingStateLoss().

Vấn đề là sau khi trở lại hoạt động gốc, tôi không còn có thể sử dụng FragmentTransactions không thể tách rời theo cách tôi đã thiết kế điều hướng trong ứng dụng.

Một giải pháp mà tôi đã nghĩ là thay đổi hoạt động của mình thành phân đoạn, tuy nhiên ứng dụng của tôi cuối cùng cũng sẽ sử dụng thanh toán trong ứng dụng mà tôi cho rằng sẽ luôn bắt đầu hoạt động của riêng mình. Điều này có vẻ giống như một hạn chế lớn - tại một số điểm trong phát triển, tôi sẽ phải hiển thị một hoạt động riêng biệt.

Tôi có thể có thể lấy đi bằng cách sử dụng commitAllowingStateLoss(), nhưng tôi cảm thấy như tôi đang thiếu một khái niệm chính trong phát triển ứng dụng máy tính bảng Android. Có cách nào để bắt đầu các hoạt động sau đó quay lại hoạt động gốc (quản lý các đoạn) mà không làm mất khả năng thực hiện các phân đoạn FragmentTransactions không?

+1

Đọc [** bài đăng trên blog **] này (http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html) có thể hữu ích. –

Trả lời

3

Bạn có thể thực hiện lại các giao dịch phân đoạn khi hoạt động gốc của bạn được tiếp tục/bắt đầu, ngay cả khi nó đã bị tạm dừng trước đó. Tài liệu chỉ có nghĩa là bạn không thể cam kết trong khoảng thời gian hoạt động bị tạm dừng (và trạng thái đã được lưu) và trước khi nó được tiếp tục lại. Nếu bạn quay trở lại hoạt động của cha mẹ sau khi truy cập một hoạt động khác, bạn được tự do sử dụng các giao dịch phân đoạn một lần nữa sau khi Activity.onStart() đã được gọi.

Lý do cho hạn chế này là Android lưu trạng thái của các mảnh được liên kết với Hoạt động trong thời gian Activity.onSaveInstanceState(). Nếu bạn cố gắng thực hiện các giao dịch phân đoạn sau thời điểm này, bạn sẽ bị mất trạng thái nếu Android cần tạo lại + khôi phục Hoạt động đó (vì thông tin nó sử dụng để tạo lại trạng thái Hoạt động chỉ là dữ liệu được chụp trong Activity.onSaveInstanceState()).

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