Vì vậy, có một số câu hỏi tương tự, nhưng tôi chưa tìm thấy câu hỏi nào giải quyết vấn đề này. Các official android documentation có vẻ trực quan nhưng khi tôi thực hiện một ứng dụng với một công việc phức tạp hơn, các mảnh vỡ backstack được lộn xộn và những thứ kỳ lạ bắt đầu xảy ra. Tôi đã phát triển một bộ xương cho các ứng dụng đơn giản, với ý tưởng về một hoạt động đơn lẻ có thể được truy cập bởi các đoạn của nó để bắt đầu các đoạn khác. Đây là cách tôi đã làm nó:Tìm hiểu các mảnh vỡ backstack
1- Tôi để hoạt động chính của tôi thực hiện một giao diện được gọi là "FragmentDelegate"
public interface FragmentDelegate {
public void startFragment(CCFragment fragment, boolean addToBackStack);
}
2- Việc thực hiện phương pháp startFrargment:
@Override
public void startFragment(CCFragment fragment, boolean addToBackStack) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragment.setFragmentDelegate(this);
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
fragmentTransaction.setCustomAnimations(R.anim.slide_in_right,
R.anim.slide_out_left, R.anim.slide_in_left,
R.anim.slide_out_right);
fragmentTransaction.replace(CONTENT_VIEW_ID, fragment,
"callerFragmentClassName");
if (addToBackStack)
fragmentTransaction.addToBackStack("callerFragmentClassName");
fragmentTransaction.commitAllowingStateLoss();
}
Các mát về điều này, tôi có thể gọi từ bất kỳ đoạn nào:
mFragmentDelegate.startFragment(aNewFragment, addToBackStack);
OK bây giờ hãy nghĩ về follo kịch bản trường hợp cánh:
Tôi bắt đầu hoạt động của mình với đoạn ban đầu, cho phép nói đoạn A. Từ đoạn A, tôi gọi cho Hoạt động của máy ảnh. Khi kết quả đến, tôi bắt đầu Fragment B (thêm A vào backstack). Từ B, tôi bắt đầu Fragment C mà không cần thêm B vào hậu trường. Vì vậy, chúng tôi có điều này trong backstack:
[A] [C]
Nếu tôi nhấn nút quay lại, tôi lấy lại cho A. Nếu tôi lặp lại quá trình này, các backstack được điều sai lầm và khi tôi bấm lại, nó sẽ đưa tôi đến đoạn C một lần nữa và một lần nữa ...
Tôi biết điều này rất khó hiểu (và khó khăn hơn để giải thích, vì tiếng Anh không phải là tiếng mẹ đẻ của tôi) nhưng nếu ai đó có thể giải thích tôi làm thế nào để các mảnh vỡ Android trở lại hoạt động thực sự hoặc cung cấp một số loại khung cho ứng dụng, sẽ tuyệt vời.
Bạn đang sử dụng findFragmentByTag (...) để có được một thể hiện của Fragments nếu chúng đã được khởi tạo chưa? Bởi vì có vẻ như bạn có nhiều phiên bản của cùng một đoạn. –
Bạn nói đúng, khi tôi bắt đầu một đoạn, tôi tạo ra một đoạn mới ... nhưng tôi yêu cầu bởi vì đoạn có thể nhận các đối số và khác nhau. –
Bạn luôn có thể đặt đối số mới cho thể hiện của một đoạn. –