Tôi đang cố gắng sử dụng FragmentActivity
với ViewPager
để hiển thị danh sách động Fragments
. Có rất nhiều ví dụ về cách làm một phiên bản tĩnh của nó. Vấn đề của tôi là danh sách mà tôi hiển thị cần được nạp động và cũng có thể thay đổi dựa trên đầu vào của người dùng (thêm/xóa). Tôi đang cố gắng sử dụng tùy chỉnh android.support.v4.content.Loader
để tải tập dữ liệu mà tôi có thể sử dụng để tạo danh sách của mình.Android - sự cố khi sử dụng FragmentActivity + Trình tải lên để cập nhật FragmentStatePagerAdapter
Tất cả mọi thứ đi tốt trong thiết lập của tôi cho đến khi tôi nhận được điểm khi tôi muốn để cập nhật các bộ chuyển đổi và ban hành FragmentStatePagerAdapter#notifyDataSetChanged()
cuộc gọi tại thời điểm đó mã này được thực hiện (từ FragmentStatePagerAdapter
)
public void finishUpdate(View container)
{
if(mCurTransaction != null)
{
mCurTransaction.commit(); // BANG!!! The exception is thrown
mCurTransaction = null;
mFragmentManager.executePendingTransactions();
}
}
Giao dịch cam kết không thành công với tin nhắn này:
java.lang.IllegalStateException: Can not perform this action inside of onLoadFinished
vì bên trong FragmentManagerImpl
mã này được thực hiện:
private void checkStateLoss() {
if (mStateSaved) {
throw new IllegalStateException(
"Can not perform this action after onSaveInstanceState");
}
if (mNoTransactionsBecause != null) {
throw new IllegalStateException(
"Can not perform this action inside of " + mNoTransactionsBecause);
}
}
Nó chỉ ra rằng mNoTransactionsBecause
giá trị không phải là null và nó được thiết lập trong LoaderManagerImpl.LoaderInfo
khi kết quả được trả về lại onLoadFinished
Tôi đã nhìn vào các biến khác nhau cố gắng bằng cách nào đó thay đổi tramsaction.commit()
-transaction.commitAllowingStateLoss()
nhưng tất cả mọi thứ liên quan giao dịch có vẻ là riêng tư hoặc ít nhất được bảo vệ theo gói.
Ai đó có thể cho tôi một ý tưởng chung nếu tôi có thể làm những gì tôi cần làm (và làm thế nào)?
Chỉ cần lưu ý rằng mã của tôi hoạt động tốt nếu thay vì sử dụng Loader Tôi chạy ops tải trong AsyncTask
Bạn có thể tìm ra cách thích hợp để thực hiện việc này với Trình tải không? Tôi đang đối mặt với cùng một vấn đề. Tôi đã có thể làm cho nó hoạt động bằng cách sử dụng 'transaction.commitAllowingStateLoss()', nhưng nó vẫn sẽ được tốt đẹp để biết những gì Google dự định chúng tôi làm ... nó có vẻ như cần phải có một cách để thực hiện một giao dịch mảnh sau khi tải dữ liệu bằng cách sử dụng bộ nạp ... – ashughes
Tôi thường từ bỏ việc này và đang sử dụng ModernTaskLoader với giới hạn tổng hợp – Bostone
ModernTaskLoader là gì? Không thể tìm thấy bất kỳ thông tin nào về nó ở bất kỳ đâu ... – ashughes