我試圖使用FragmentActivity
和ViewPager
來顯示動態列表Fragments
。有很多關於如何做靜態版本的例子。我的問題是我顯示的列表需要動態加載,也可以根據用戶輸入(添加/刪除)進行更改。我正嘗試使用自定義的android.support.v4.content.Loader
加載可用於構建我的列表的數據集。Android - 使用FragmentActivity + Loader更新FragmentStatePagerAdapter的問題
一切順利在我的設置很好,直到我去點時,我想更新適配器,併發出此時該代碼被執行(從FragmentStatePagerAdapter
)FragmentStatePagerAdapter#notifyDataSetChanged()
呼叫
public void finishUpdate(View container)
{
if(mCurTransaction != null)
{
mCurTransaction.commit(); // BANG!!! The exception is thrown
mCurTransaction = null;
mFragmentManager.executePendingTransactions();
}
}
提交失敗與交易此消息:
java.lang.IllegalStateException: Can not perform this action inside of onLoadFinished
因爲內FragmentManagerImpl
執行該代碼:
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);
}
}
事實證明,mNoTransactionsBecause
值不爲空,它是在LoaderManagerImpl.LoaderInfo
設定時,返回的結果回onLoadFinished
我一直在尋找各種變量試圖以某種方式改變tramsaction.commit()
到transaction.commitAllowingStateLoss()
但一切相關交易似乎是私人的,或者至少是包裹保護的。
如果我可以做我需要做的事情(以及如何做),有人可以給我一個總體想法嗎?
只是要注意的是我的代碼工作正常,如果不是使用裝載機我的AsyncTask
你已經能夠找出正確的方法用裝載機做到這一點?我面臨同樣的問題。我可以使用'transaction.commitAllowingStateLoss()'來實現它的功能,但是知道Google希望我們做什麼仍然很好......似乎應該有一種在加載數據後執行片段事務的方法使用加載程序... – ashughes
我通常放棄了這一點,並使用ModernTaskLoader以限制彙集 – Bostone
什麼是ModernTaskLoader?在任何地方都找不到任何信息... – ashughes