0

Everything works fine until I wait for about 5 to 6 minutes and then again do the same process of add a particular fragment and setting adapter of my ListView and I get this error:java.lang.IllegalStateException當我設置的ListView適配器一些空閒時間

java.lang.IllegalStateException: Observer [email protected] was not registered. 
     at android.database.Observable.unregisterObserver(Observable.java:69) 
     at android.widget.BaseAdapter.unregisterDataSetObserver(BaseAdapter.java:42) 
     at android.widget.AbsListView.onDetachedFromWindow(AbsListView.java:3453) 
     at android.view.View.dispatchDetachedFromWindow(View.java:14532) 
     at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3133) 
     at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3130) 
     at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3130) 
     at android.view.ViewGroup.removeViewInternal(ViewGroup.java:4497) 
     at android.view.ViewGroup.removeViewInternal(ViewGroup.java:4470) 
     at android.view.ViewGroup.removeView(ViewGroup.java:4402) 
     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1002) 
     at android.app.FragmentManagerImpl.removeFragment(FragmentManager.java:1187) 
     at android.app.BackStackRecord.run(BackStackRecord.java:798) 
     at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467) 
     at android.app.FragmentManagerImpl$1.run(FragmentManager.java:452) 
     at android.os.Handler.handleCallback(Handler.java:739) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:145) 
     at android.app.ActivityThread.main(ActivityThread.java:5942) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195) 

我得到這個錯誤之前叫什麼一段代碼後:

btnWith.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if (!withActive) { 
       btnWith.setBackgroundColor(Color.parseColor("#FF6F00")); 
       btnDepo.setBackgroundColor(Color.parseColor("#FF8F00")); 

       trans = manager.beginTransaction(); 

       trans.remove(depoFrag); 
       trans.add(R.id.placeInMain, withFrag, "Withdrawals Fragment"); 

       trans.commit(); 

       depoActive = false; 
       withActive = true; 

      } 
     } 

上面的代碼中我的MainActivity.java的onCreate()接着在onActivityCreated中調用它()

private void updateTheAdapter() { 
    adapter = new SimpleAdapter(getActivity(), postList, 
      R.layout.balance_row_withdrawal, new String[]{TAG_AMOUNT, TAG_REASON, 
      TAG_DONE_AT_TIME, TAG_DONE_AT_DATE,TAG_ID}, new int[]{R.id.tvListAmount, R.id.tvListReason, 
      R.id.tvListTime, R.id.tvListDate,R.id.tvIDWithdraw})}; 
    } 

Note : Everything works fine until the phone is left idle for 5 to 6 minutes. Please help me to solve this error which looks like it has something to do with Observer Pattern.

回答

0

您每次單擊按鈕時都會打電話給trans.remove(depoFrag);。如果你沒有add它同時,那麼你試圖刪除它兩次......這可能會觸發異常?

+0

我試圖搜索片段...如果它不是空的,那麼只有我刪除它。但它不能成爲問題,因爲它可以工作,直到設備閒置一段時間@JMLord –

+0

是的,我認爲延遲可能會使這個假設失效。然而,當試圖刪除一個不存在的視圖時,問題肯定會出現,因爲'ViewGroup.removeView'是堆棧跟蹤的一部分,'未註冊'是最後一個錯誤... –

+0

對不起,讓我糾正:視圖在那裏,因爲刪除視圖被執行和分派(正如我們可以在堆棧跟蹤中看到的那樣)。但是,在ListView中出現問題,就好像它沒有正確註冊爲DataSetObserver(無論如何)。 –

相關問題