Ich versuche, ein Element meiner ListView
zu löschen, wenn ein Element vom Benutzer angeklickt wird, aber wenn der Benutzer darauf klickt, stürzt meine Anwendung ab und ich weiß nicht warum. HierLöschen eines Elements aus einer ListView in Android
ist der Code, der das Löschen des Elements, wenn es ausgewählt ist:
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
tasques.remove(position);
notifyDataSetChanged();
}
Hier ist die onCreate
meiner mainActivity
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tasquesArrayList = new ArrayList<>();
listView = (ListView) findViewById(R.id.listview);
...
adapter = new tascaListViewAdapter(this,tasquesArrayList);
...
listView.setAdapter(adapter);
listView.setOnItemClickListener(adapter);
adapter.notifyDataSetChanged();
}
Hier ist der Fehler:
Exception dispatching input event.
E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback
E/MessageQueue-JNI: 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(2131492951, class android.widget.ListView) with Adapter(class edu.lasalle.pprog2.ac2.adapter.tascaListViewAdapter)]
at android.widget.ListView.layoutChildren(ListView.java:1618)
at android.widget.AbsListView.onTouchModeChanged(AbsListView.java:3731)
at android.view.ViewTreeObserver.dispatchOnTouchModeChanged(ViewTreeObserver.java:997)
at android.view.ViewRootImpl.ensureTouchModeLocally(ViewRootImpl.java:3744)
at android.view.ViewRootImpl.ensureTouchMode(ViewRootImpl.java:3728)
at android.view.ViewRootImpl$EarlyPostImeInputStage.processPointerEvent(ViewRootImpl.java:4244)
at android.view.ViewRootImpl$EarlyPostImeInputStage.onProcess(ViewRootImpl.java:4212)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3853)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6246)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6220)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6181)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6349)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:323)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: edu.lasalle.pprog2.ac2, PID: 3629
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(2131492951, class android.widget.ListView) with Adapter(class edu.lasalle.pprog2.ac2.adapter.tascaListViewAdapter)]
at android.widget.ListView.layoutChildren(ListView.java:1618)
at android.widget.AbsListView.onTouchModeChanged(AbsListView.java:3731)
at android.view.ViewTreeObserver.dispatchOnTouchModeChanged(ViewTreeObserver.java:997)
at android.view.ViewRootImpl.ensureTouchModeLocally(ViewRootImpl.java:3744)
at android.view.ViewRootImpl.ensureTouchMode(ViewRootImpl.java:3728)
at android.view.ViewRootImpl$EarlyPostImeInputStage.processPointerEvent(ViewRootImpl.java:4244)
at android.view.ViewRootImpl$EarlyPostImeInputStage.onProcess(ViewRootImpl.java:4212)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3853)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6246)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6220)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6181)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6349)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:323)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Application terminated.
Dank im Voraus!
Können Sie das Fehlerprotokoll teilen? –
@ZahidulIslam hat es getan :) – HessianMad
Wie der Fehler sagt, haben Sie die Arraylist Daten außerhalb von Ihrer UI/Main Thread ändern. Überprüfen Sie, ob Sie das getan haben. –