Khi tôi khởi động ứng dụng, nó chạy AsyncTask
để tải lên và sau đó trong onPostExecute
, sau đó tôi setContentView
vào bố cục mới sau đó thêm đoạn bằng hai nút cung cấp hai chế độ thêm FragmentTransaction
. Sau khi một trong hai chế độ được nhấp, sau đó nó sẽ thay thế phân đoạn bằng một phương thức thay thế khác bằng FragmentTransaction
.Đoạn được thay thế vẫn hiển thị
Nếu ứng dụng gặp sự cố, nó sẽ trở về màn hình đầu tiên, tải lên hai nút cung cấp hai chế độ. Trong trường hợp này nếu một trong hai chế độ được chọn, đoạn thứ hai được tải nhưng bây giờ là nền đột nhiên trong suốt cho thấy hai nút dưới đây và họ vẫn có thể nhấp. Nếu họ được nhấp một lần nữa họ thay thế đúng mảnh để nó không được hiển thị dưới đây. Điều này thật kỳ lạ, tôi không thể hiểu điều gì có thể gây ra điều này.
Tôi đã nghiên cứu và nhìn thấy hai câu hỏi tương tự này, one và two, cho rằng có thể do ID sai hoặc tôi đã xác định đoạn trong XML. Cả hai yếu tố này đều không xảy ra.
Mã của tôi được hiển thị bên dưới:
Dưới đây tôi thay thế màn hình tải.
@Override
protected void onPostExecute(Void result) {
setContentView(R.layout.activity_main_screen);
FragmentTransaction transaction = getSupportFragmentManager()
.beginTransaction();
transaction.add(R.id.fragment_container, new ModeFragment())
.commit();
}
Sau đó, khi một nút được nhấp tôi vượt qua đoạn tôi muốn thay thế hiện tại với thành phương pháp dưới đây:
private void replaceCurrentFragment(Fragment fragment) {
FragmentTransaction transaction = getSupportFragmentManager()
.beginTransaction();
transaction.replace(R.id.fragment_container, fragment)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.addToBackStack(null).commit();
}
này hoạt động lần đầu tiên, tuy nhiên nếu một vụ tai nạn xảy ra sau đó ứng dụng quay trở lại đoạn đầu tiên và lần thứ hai phương thức này được truyền, mảnh thay thế mới là bán vô hình. Nhấp vào nút trên mảnh đầu tiên một lần nữa gọi phương thức này một lần nữa và nó bây giờ là tốt.
Rõ ràng là tôi không muốn ứng dụng gặp sự cố nên điều này sẽ không xảy ra, nhưng tôi có cảm giác rằng có điều gì đó không ổn với cách tôi viết mã của mình.
Đây phải là nhận xét so với câu trả lời. –
không, điều này cũng thích hợp để là câu trả lời. – Zyoo
Vấn đề của tôi là với thuộc tính background trong phần tử HoloGraph (một thư viện nhỏ cho các biểu đồ vẽ) trong tệp sơ đồ bố trí XML của bản tóm tắt của tôi. Tôi đã xóa thuộc tính đó và nó đã hoạt động. Tôi đã thay thế mảnh vỡ của mình sau khi tách ra, để làm mới mảnh, nhưng thực sự tôi không cần phải thay thế mảnh vỡ, tôi chỉ cần tách ra, gắn (gọi onCreateView của fragment) và cam kết. Nếu bạn có vấn đề tương tự và bạn phải chuyển dữ liệu vào đoạn của mình, tôi đề nghị thay đổi nơi bạn lưu trữ dữ liệu từ gói của phân đoạn đó thành một số trường trong một lớp khác. Truy cập chúng trong onCreateView của đoạn. – Metallica