7

Sau khi nâng cấp từ thư viện hỗ trợ Android 23.1.1 lên 25.1.0 hành vi mới nhất từ ​​popBackStack() đã thay đổi trong ứng dụng của chúng tôi. Ví dụ: Tôi có ba FragmentTransactions trên BackStack. Bây giờ FragmentTrsansaction thứ tư được thêm vào BackStack. FragmentTransactions là như thế này:popBackStack() hành vi khác sau khi nâng cấp thư viện hỗ trợ từ 23.1.1 đến 25.1.0

FragmentTransaction transaction = fragmentManager.beginTransaction() 
    .replace(R.id.fragment_container_single, target, CoreActivity.FRAGMENT_TAG_LEFT) 
    .addToBackStack(<CONCRETE_TRANSACTION_NAME>) 
    .commit(); 

Fragment # 4 có logic, nơi nó tuyến để fragment # 5 trong onViewCreated() tự động (Tôi biết, đó là xấu xí và tôi phải thay đổi điều này). Dù sao, khi tôi muốn rời khỏi Fragment # 5 tôi muốn tiếp tục lại Fragment đã được hiển thị trước Fragment # 4. Tôi làm điều này bằng tên giao dịch:

getFragmentManager().popBackStack(“<CONCRETE_TRANSACTION_NAME_4>”, FragmentManager.POP_BACK_STACK_INCLUSIVE); 

hay này:

getFragmentManager().popBackStack(“<CONCRETE_TRANSACTION_NAME_3>”, 0); 

Nhưng với điều này gọi onCreateView()onViewCreated() của Fragment # 4 sẽ được gọi và Fragment # 5 sẽ được bổ sung ngay cho BackStack . Ngay cả khi tôi tiếp tục với Fragment # 1 onViewCreated() được gọi cho mọi Phân đoạn trên BackStack - cho Fragment # 2, Fragment # 3 và Fragment # 4, ngay cả khi chúng không quan trọng đối với FragmentTransaction mà tôi muốn quay lại.

Dưới thư viện hỗ trợ 23.1.1 Tôi đã chuyển thành công trở lại Fragment # 3. Đoạn số 4 được bao gồm mà không cần gọi số onViewCreated(). Điều này dường như trực quan hơn và phù hợp với tôi, bởi vì gọi onViewCreated() cho các mảnh vỡ "bên ngoài" của FragmentTransaction của tôi có vẻ không cần thiết?

Tôi biết, addToBackStack() chỉ lưu các trạng thái giao dịch chứ không phải các Phân đoạn và phân đoạn có thể phải được tạo lại.

Có tương tự posts cho điều đó, nhưng tôi muốn hiểu tại sao nó bị hỏng sau khi cập nhật thư viện hỗ trợ. Tôi không thể tìm thấy sự thay đổi ở bất cứ đâu. Đây có phải là lỗi hay là lỗi ngay bây giờ?

Tôi đang thay đổi mã của mình.

Cảm ơn bạn đã trợ giúp!

CẬP NHẬT Tôi gặp nhiều sự cố/thay đổi vòng đời sau khi nâng cấp lên thư viện hỗ trợ 25.1.0. Có một số Google issue nơi tôi đã nhận xét thêm về các vấn đề của mình. Hiện tại tôi phải quay lại phiên bản 24.2.1 mới nhất và theo dõi chủ đề này. Đây chỉ là giải pháp tạm thời của tôi. Những vấn đề này bắt đầu với thư viện hỗ trợ 25.0.0.

+0

Tôi gặp sự cố với nút quay lại trong phiên bản này. Tôi tự hỏi nếu nó có liên quan đến vấn đề vòng đời này là tốt. Ví dụ hoạt động được tạo lại. –

+0

Tôi đã kiểm tra điều này. Khi tôi quay lại hoạt động của tôi không được tái tạo. Nó được tạm dừng và tiếp tục như mong đợi giữa các hoạt động. Nhưng bởi bahavior trở lại của mảnh vỡ đã thay đổi theo thứ tự của nó. Có vẻ như nó không liên quan đến phiên bản thư viện mới. Có lẽ hoạt động của bạn được tạo lại bởi Android do bộ nhớ thấp chẳng hạn? –

+0

Khi tôi sử dụng hỗ trợ 25.x, tôi đã gặp sự cố sau khi sử dụng nút quay lại. Khi tôi quay lại 24.x, nó hoạt động tốt. Một số thiết bị. Khi tôi có thời gian tôi phải chưng cất bài kiểm tra khả thi tối thiểu. –

Trả lời

6

Chú ý đến hỗ trợ mới 25.1.0.

Đã có sự thay đổi trong vòng đời đoạn.
Hiện tại có chức năng mới để tối ưu hóa các hoạt động và trì hoãn quá trình chuyển đổi phân đoạn.

đọc này: https://code.google.com/p/android/issues/detail?id=230415

+0

Có, cảm ơn, tôi đã nhận ra điều đó. Thậm chí nếu tôi sử dụng 'transaction.setAllowOptimization (false);' không có gì thay đổi và 'onCreateView()' vẫn được gọi. Nhưng bạn có nghĩ đây là một hiệu ứng của các tối ưu hóa mới và có lẽ chúng ta không thể chuyển sang hành vi cũ? –

+0

Tôi nghĩ rằng vòng đời mới thay đổi quá trình chuyển đổi và hành vi cũng trong trường hợp của bạn. –

+0

Tôi nghĩ rằng nó cũng có thể là tối ưu hóa mới. Trong khi đó tôi để lại nhận xét về vấn đề của Google, có thể một nhà phát triển có thể nói điều gì đó cụ thể về điều đó. Tại địa phương tôi đã thay đổi mã của tôi quá, do đó, 'onCreateView()' không còn gọi một lần nữa một FragmentTransaction. Tôi nghĩ rằng những người khác cũng đang phân tích với điều này và hy vọng chúng tôi sẽ có thêm thông tin. –

0

Đã vấn đề tương tự. Sửa lỗi trong 25.3.0

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