java.lang.IllegalStateException: Der Inhalt des Adapters hat sich geändert, aber ListView ... trotz Aufruf von notifydatasetchanged ()

Welche bewährten Methoden sind zu befolgen, um den Inhalt einer Listenaktivität durch einen Hintergrundthread zu aktualisieren (Async-Task)?

1) Ich rufe dienotifyDataSetChanged () um den adapter zu aktualisieren, sobald ich den inhalt des adapters manipuliere, aber meine app force trotzdem schließt, während der benutzer einen scroll durchführt oder auf die liste klickt. Alle Hinweise, um dies zu verhindern, wären sehr hilfreich.

Logcat: java.lang.IllegalStateException: Der Inhalt des Adapters hat sich geändert, ListView hat jedoch keine Benachrichtigung erhalten.

2) Wo soll ich den Inhalt der Liste aktualisieren? innerhalb des doInBackground () oder onProgressUpdate ()?

3) Stürzt regelmäßig ab, wenn der Benutzer auf das Listenelement klickt. Behebt das Deaktivieren von Klickereignissen in der Listenaktivität während des Hintergrundvorgangs das Problem? Wenn Sie nicht sicher sind, wie Sie Elemente entfernen oder festlegen sollen, klicken Sie auf Listener, um die Listenaktivität dynamisch zu überwachen. Bitte weisen Sie mich auch an.

4) Ich denke nicht, dass das Blockieren aller Interaktionen während der asynchronen Taskausführung im Hintergrund der einzige Weg ist, um das Problem zu lösen. Ich weiß, dass es einen einfachen Weg gibt, aber ich brauche Hilfe.

Danke im Voraus.

Das ist mein onCreate ...

protected void onCreate(Bundle savedInstanceState) {    
super.onCreate(savedInstanceState);
setContentView(R.layout.fa);

tvStatus=(TextView) findViewById(R.id.tvStatus);

 adapter = new SimpleAdapter(
        this,
        mostPopularList,
        R.layout.list_item,
        new String[] {"title","author","views","date"},
        new int[] {R.id.textView1,R.id.textView2,R.id.textView4,R.id.textView3});
        //populateList();


        setListAdapter(adapter);
  }

Meine asynchrone Aufgabe ...

          private class LongOperation extends AsyncTask<String, Void, String> {

          @Override
          protected String doInBackground(String... params) {
        // code for adding new listactivty items 
          }      

          @Override
          protected void onPostExecute(String networkStatus) {
            adapter.notifyDataSetChanged();
          }

          @Override
          protected void onPreExecute() {

          }

          @Override
          protected void onProgressUpdate(Void... values) {

           }
          }

Logcat:

Ich habe selten die illegale Ausnahme zu ... nicht in der Lage, es zu reproduzieren. poste den logcat, wenn ich wieder darauf stoße.

FATAL EXCEPTION: main
java.lang.IndexOutOfBoundsException: Invalid index 7, size is 4
    at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257)
    at java.util.ArrayList.get(ArrayList.java:311)
    at android.widget.SimpleAdapter.bindView(SimpleAdapter.java:147)
    at android.widget.SimpleAdapter.createViewFromResource(SimpleAdapter.java:126)
    at android.widget.SimpleAdapter.getView(SimpleAdapter.java:114)
    at android.widget.AbsListView.obtainView(AbsListView.java:1294)
    at android.widget.ListView.makeAndAddView(ListView.java:1727)
    at android.widget.ListView.fillDown(ListView.java:652)
    at android.widget.ListView.fillGap(ListView.java:623)
    at android.widget.AbsListView.trackMotionScroll(AbsListView.java:2944)
    at android.widget.AbsListView.onTouchEvent(AbsListView.java:2065)
    at android.widget.ListView.onTouchEvent(ListView.java:3315)
    at android.view.View.dispatchTouchEvent(View.java:3766)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:897)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1671)
    at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
    at android.app.Activity.dispatchTouchEvent(Activity.java:2086)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1655)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1671)
    at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
    at android.app.Activity.dispatchTouchEvent(Activity.java:2086)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1655)
    at android.view.ViewRoot.handleMessage(ViewRoot.java:1785)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:123)
    at android.app.ActivityThread.main(ActivityThread.java:4627)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:521)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)

Antworten auf die Frage(4)

Ihre Antwort auf die Frage