Java 由于未处理的异常,应用程序崩溃:适配器的内容已更改,但ListView未收到通知

Java 由于未处理的异常,应用程序崩溃:适配器的内容已更改,但ListView未收到通知,java,android,android-studio,android-listview,Java,Android,Android Studio,Android Listview,完全异常:未处理的异常:适配器的内容已更改 已更改,但ListView未收到通知。确保 适配器的内容不是从后台线程修改的,而是 仅从UI线程。确保适配器调用 当其内容更改时,notifyDataSetChanged()。[在 带适配器的ListView(2131296364,类android.widget.ListView)(类 elfar.insitemobile.Tabs.EventTable$EventTableListAdapter] 它只在应用程序启动时发生(列表正在使用挂起的事件进行

完全异常:未处理的异常:适配器的内容已更改 已更改,但ListView未收到通知。确保 适配器的内容不是从后台线程修改的,而是 仅从UI线程。确保适配器调用 当其内容更改时,notifyDataSetChanged()。[在 带适配器的ListView(2131296364,类android.widget.ListView)(类 elfar.insitemobile.Tabs.EventTable$EventTableListAdapter]

它只在应用程序启动时发生(列表正在使用挂起的事件进行更新),有时也会发生。 我注意到,当应用程序启动时,列表中有很多等待更新的事件时,就会发生这种情况。如果只有很少的项目要更新,它将不会发生


我尝试在线程内部运行这些列表更改,并在每次更新后放置
notifyDataSetChanged()
,但这种情况仍然发生。

这似乎很明显,但经常发生-确保您没有将项添加到UI线程外部的ArrayList(或您正在使用的任何其他列表)中。因此,请确保添加项目并在UI线程中调用notifyDataSetChanged()。这一职位可能有进一步的帮助:


希望这有帮助

UPDATE:我通过将Add和Remove函数的调用插入到使用mainLooper创建的处理程序的新Runnable中,解决了以下问题

private static Handler mHandler = new Handler(Looper.getMainLooper());

mHandler.post(new Runnable() {

        @Override
        public void run() {
            lMessages.add(0,message);
            ...
}

是的,但是我如何在UI线程内部调用它呢?现在,我使用一个处理程序(新处理程序(Looper.getMainLooper())及其post方法调用Remove和Add函数