2013-05-19 9 views
9

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, onetwo, 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.

Trả lời

11

Tôi đã gặp vấn đề tương tự với tôi và đó là vì tôi đã tải một đoạn trong OnCreate of my Activity, mà không kiểm tra xem có lưu trữInstanceState hay không, vì vậy android mở lại tất cả các đoạn cũ, sau đó thực hiện OnCreate , mà thêm mảnh vỡ trên những cái cũ mà không cần thay thế chúng vì vậy khi bạn điều hướng đến một đoạn khác, nó chỉ thay thế phần đầu, nhưng không thay thế phần đầu, vì vậy bạn sẽ thấy các mảnh bên dưới.

Có thể không hoàn toàn giống với bạn, nhưng nó có thể giúp bạn tìm ra.

+1

Đây phải là nhận xét so với câu trả lời. –

+7

không, điều này cũng thích hợp để là câu trả lời. – Zyoo

+0

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