5

Tôi muốn thông báo ViewPagerAdapter rằng tập dữ liệu đã thay đổi trong Loader.onLoadFinish chức năng gọi lại.Cách thực hiện các giao dịch Fragment trong FragmentPagerAdapter trong phương thức gọi lại onLoadFinish?

Nó được ngăn chặn vì trạng thái của các mảnh có thể được lưu.

Từ LoaderManager.LoaderCallbacks.onLoadFinished(Loader loader, D data) phương pháp tài liệu:

Lưu ý rằng thông thường một ứng dụng không được phép để thực hiện các giao dịch đoạn trong khi trong cuộc gọi này, vì nó có thể xảy ra sau khi nhà nước của một hoạt động là saved.`

Làm thế nào tôi có thể khắc phục vấn đề này? Làm cách nào để kiểm tra trạng thái Activity và cam kết giao dịch Fragment?

Trả lời

4

Tôi đã đi kèm với giải pháp sau đây:

Phương pháp changeCursorInOtherThread được sử dụng trong onLoadFinishedonLoaderReset.

Handler được tạo ra trong Activity:

private Handler mHandler = new Handler(); 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    mSaved = true; 

} 

private void changeCursorInOtherThread(final Cursor data) { 
    if(!mSaved){ 
     mHandler.post(new Runnable() { 

      @Override 
      public void run() { 
       mViewPagerAdapter.changeCursor(data); 
      } 
     }); 
    } 
} 
1

Tôi đã có một vấn đề tương tự. Muốn hiển thị số DialogFragment sau onLoadFinished(). Như bạn đã nói, không thể thực hiện giao dịch phân đoạn bên trong onLoadFinished(). Nhưng sau đó tôi nhận ra rằng tôi chỉ có thể thực hiện LoaderCallbacks trong số DialogFragment. Và nó hoạt động như một sự quyến rũ. Thay vì lắng nghe số Loader để hoàn thành công việc của mình trong một Activity, tôi làm điều đó bên trong Fragment.

Bạn có thể làm tương tự. Thay vì thực hiện onLoadFinished() bên trong hoạt động của bạn, bạn chỉ có thể triển khai nó bên trong các Mảnh vỡ được đặt trong số ViewPager của bạn. Tất nhiên trong một số trường hợp nó không có ý nghĩa trong một ViewPager, nó phụ thuộc vào cấu trúc dữ liệu của bạn.

Có thêm thảo luận về vấn đề này here.

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