5

मैंने SO पर इस बारे में बहुत कुछ पढ़ा है लेकिन मैं अपने मामले में समाधान ढूंढने में सक्षम हूं। यहां सेटअप है:एडाप्टर की सामग्री बदल गई है लेकिन ListView को अधिसूचना प्राप्त नहीं हुई है, पृष्ठभूमि में अपडेट नहीं किया गया

गतिविधि ए, सूची और डेटा प्रदर्शित किया जा रहा है। मेरे डेटा प्रबंधक के async कार्य को अपडेट करने खत्म करते हैं, तो निम्न होता है:

protected void onPostExecute(Void v) { 
     super.onPostExecute(v); 

     if (editedDataSectionRows == null) 
      editedDataSectionRows = new int[] {0, 0, 0, 0, 0, 0, 0}; 

     mData= editedData; 
     mSectionRows = editedDataSectionRows; 

     if (mCallback != null) { 
      mCallback.dataUpdated(); 
     } 
    } 

जब डेटा अद्यतन किया जाता है, गतिविधि एक एक कॉलबैक हो जाता है और करता है निम्नलिखित:

@Override 
public void dataUpdated() { 
    mData = mDataManagerInstance.getData(); 
    mDataSectionCount = mDataManagerInstance.getDataSectionRows(); 
    mListAdapter.notifyDataSetChanged(); 
} 

mData युक्त एक ArrayList है सब "पंक्तियां" और mDataSectionCount एक int [] है जिसमें एमडीएटी को खंडों में विभाजित किया जाना चाहिए, इस बारे में जानकारी शामिल है।

अब, गतिविधि ए में एक विकल्पमेनू है जो दूसरी गतिविधि खोल सकता है। गतिविधि बी

प्रत्येक अब और फिर जब बंदर और गतिविधि बी समाप्त होता है। गतिविधि एक के लिए मेरे onResume कहा जाता हो जाता है:

@Override 
protected void onResume() { 
    super.onResume(); 
    mDataManagerInstance = DataManager.getInstance(); 

    mDataManagerInstance.setDataUpdatedListener(this); 
    mDataManagerInstance.updateData(); 

    this.invalidateOptionsMenu(); 
} 

(UpdateData सिर्फ दूर मेरी AsyncTask आग अगर इसके पहले से ही चल नहीं) और फिर गंदगी प्रशंसक हिट ...:

FATAL EXCEPTION: main 
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. [in ListView(-1, class com.applidium.headerlistview.HeaderListView$InternalListView) with Adapter(class se.*.android.activities.ListActivity$1)] 
     at android.widget.ListView.layoutChildren(ListView.java:1582) 
     at android.widget.ListView.commonKey(ListView.java:2104) 
     at android.widget.ListView.onKeyDown(ListView.java:2085) 
     at android.view.KeyEvent.dispatch(KeyEvent.java:2620) 
     at android.view.View.dispatchKeyEvent(View.java:7149) 
     at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1458) 
     at android.widget.ListView.dispatchKeyEvent(ListView.java:2070) 
     at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1462) 
     at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1462) 
     at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1462) 
     at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1462) 
     at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1462) 
     at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1462) 
     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1898) 
     at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1375) 
     at android.app.Activity.dispatchKeyEvent(Activity.java:2356) 
     at com.actionbarsherlock.app.SherlockFragmentActivity.dispatchKeyEvent(SherlockFragmentActivity.java:122) 
     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1825) 
     at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3585) 
     at android.view.ViewRootImpl.handleImeFinishedEvent(ViewRootImpl.java:3555) 
     at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:2805) 
     at android.os.Handler.dispatchMessage(Handler.java:99) 
     at android.os.Looper.loop(Looper.java:213) 
     at android.app.ActivityThread.main(ActivityThread.java:4787) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:511) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556) 
     at dalvik.system.NativeStart.main(Native Method) 

कोई भी विचार? [: "एडाप्टर के सामग्री बदली है लेकिन ListView एक सूचना प्राप्त नहीं किया" एंड्रॉयड, ListView IllegalStateException] (http://stackoverflow.com

+0

की संभावित डुप्लिकेट करना/प्रश्न/3132021/android-listview-illegalststateexception-the-content-of-the एडाप्टर-बदल गया है) – rds

उत्तर

1

कोशिश है कि ui सूत्र में

runOnUiThread(new Runnable(){ 
     public void run() { 
      mListAdapter.notifyDataSetChanged(); 
     } 
    }); 
+0

लेकिन ऑनपोस्टएक्सक्यूट यूआई-थ्रेड पर पहले से ही चल रहा है? (हालांकि मैं इसे जोड़ता हूं और यह भी जांचता हूं कि यह मेरे मुद्दों को हल करता है या नहीं।) –

+0

बस चेक किया गया, कोई बदलाव नहीं हुआ। जब भी गतिविधि बी बंद हो जाता है और रेज़्यूम को –

+0

कहा जाता है तब भी मुझे वही अपवाद मिलता है हाँ यह अजीब है। क्या आपने जांच की है कि नया डेटा मान्य है? – thealeksandr

संबंधित मुद्दे

 संबंधित मुद्दे