2015-10-19 62 views
1

我在工作的應用程序,其中,我必須顯示可用wifi的自定義列表。爲此我得到列表裏面overrided方法:IllegalStateException:適配器的內容已更改,但ListView未收到通知?

public void onScanComplete(List<ScanResult> results) {} 

並從這裏,我打電話setAdapter。一旦列表正顯示出它沒有任何崩潰滾動罰款,但是當我點擊任何列表項,用於連接無線網絡提供密碼 回到下面的方法列表稱爲: -

private int counter; 
@Override 
public void onConnectivityChange(final NetworkInfo info) { 
     int len = mItems.size(); 

     for (int index = 0; index < len; index++) { 
      WifiListData item = mItems.get(index); 
      item.setIsConnected(false); // setting each to not connected 
      item.setState(null); 
      if (item.getSSID()!=null&&item.getSSID().equals(info.getExtraInfo().replace("\"", ""))) { 
       item.setIsConnected(info.isConnected()); 
       item.setState(getStatusInSimpleEnglish(info.getDetailedState())); 
      } 
     } 
     if (info.isConnected()) { 
      mTimerHandler.removeCallbacks(mTimerRunnable); 
     } 
     if (info.isConnected() && info.getExtraInfo().equals(String.format("\"%s\"", mSelectedSSID))) { 
      DebugLogger.d(TAG, "Connected to " + info.getExtraInfo()); 
      dismissProgressDialog(); 
      mSelectedSSID = ""; 
     } 

     if (info.getState() == NetworkInfo.State.CONNECTED) { 
      Collections.sort(mItems, new RssiComparator()); 
      putConnectedOnTop(); 
      Handler handler = new Handler(); 
      handler.postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        connectTOSignIn(); 
       } 
      },1000); 
     } 
     if (info.getState() == NetworkInfo.State.CONNECTING) { 
      Collections.sort(mItems, new RssiComparator()); 
      putConnectedOnTop(); 
     } 
     notifyAdapter(); 
} 

當我開始滾動的應用程序要崩潰的堆棧跟蹤是: -

[null]=java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. Make sure your adapter calls notifyDataSetChanged() when its content changes. [in ListView(2131624395, class android.widget.ListView) with Adapter(class android.widget.HeaderViewListAdapter)] 
at android.widget.ListView.layoutChildren(ListView.java:1555) 
at android.widget.AbsListView.onTouchMove(AbsListView.java:3549) 
at android.widget.AbsListView.onTouchEvent(AbsListView.java:3424) 
at android.view.View.dispatchTouchEvent(View.java:7706) 
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2210) 
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1945) 
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2069) 
at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1516) 
at android.app.Activity.dispatchTouchEvent(Activity.java:2485) 
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2017) 
at android.view.View.dispatchPointerEvent(View.java:7886) 
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3956) 
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3835) 
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3401) 
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3451) 
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3420) 
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3527) 
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3428) 
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3584) 
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3401) 
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3451) 
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3420) 
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3428) 
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3401) 
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5604) 
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5584) 
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5555) 
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5684) 
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185) 
at android.os.MessageQueue.nativePollOnce(Native Method) 
at android.os.MessageQueue.next(MessageQueue.java:138) 
at android.os.Looper.loop(Looper.java:123) 
at android.app.ActivityThread.main(ActivityThread.java:5017) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:788) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:604) 
at dalvik.system.NativeStart.main(Native Method) 

我讓UI線程AS內部通知: -

private void notifyAdapter() { 
    mActivity.runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      homeWifiListAdapter.notifyDataSetChanged(); 
      } 
    }); 
} 

任何建議高度讚賞,感謝。

+0

也許它缺少的部分給出,其中傳遞新數據的ListView? –

+0

@Simone Leoni非常感謝您的回覆,其實列表是全局列表沒有列表是在變更中創建的。 –

+0

'connectTOSignIn()'方法改變你的'mItems'嗎? 但是我認爲你不能這樣做,你正在修改在listview中存儲和使用的東西。 將新數據傳遞到適配器應該解決問題! ()然後調用着名的'notifyDataSetChanged()' –

回答

-1

要更新您的列表視圖中只有一行,你可以試試這個 - >answer

這招被羅馬蓋伊

相關問題