java.lang.IllegalStateException:适配器的内容已更改,但HederListView未收到通知

java.lang.IllegalStateException:适配器的内容已更改,但HederListView未收到通知,java,android,listview,Java,Android,Listview,我正在我的项目中使用。它很好用。但在一个地方,当我尝试使用notifydatesetchanges时,它抛出了非法状态异常。只有当我尝试快速滚动列表视图时才会发生这种情况 这是堆栈跟踪 05-12 12:03:42.641: E/AndroidRuntime(22291): java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notifica

我正在我的项目中使用。它很好用。但在一个地方,当我尝试使用notifydatesetchanges时,它抛出了非法状态异常。只有当我尝试快速滚动列表视图时才会发生这种情况

这是堆栈跟踪

 05-12 12:03:42.641: E/AndroidRuntime(22291): 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(-1, class HeaderListView$InternalListView) with Adapter(class android.widget.HeaderViewListAdapter)]
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.widget.ListView.layoutChildren(ListView.java:1555)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.widget.AbsListView.onTouchMove(AbsListView.java:3549)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.widget.AbsListView.onTouchEvent(AbsListView.java:3424)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.View.dispatchTouchEvent(View.java:7736)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2210)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1945)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2068)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1515)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.app.Activity.dispatchTouchEvent(Activity.java:2466)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2016)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.View.dispatchPointerEvent(View.java:7916)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4031)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3910)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3460)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3510)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3479)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3586)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3487)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3643)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3460)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3510)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3479)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3487)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3460)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5728)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5659)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5630)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5808)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
 05-12 12:03:42.641: E/AndroidRuntime(22291):   at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiv
我尝试了许多解决方案,并通过大量搜索,但没有找到任何固溶体

这是我的密码

HeaderListView listView;
MyAdapter myAdapter;
ArrayList<String> eventList = new ArrayList<String>();
HeaderListView列表视图;
我的适配器我的适配器;
ArrayList eventList=新建ArrayList();
第一次获取列表的代码

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

    ArrayList<String> loadMoreList;
    @Override
    public String doInBackground(String... params) {
        loadMoreList = WebFunctions.getEventList(params[0] ,params[1], params[2], params[3]);

        return null;
    }

    @Override
    public void onPreExecute() {

        }

    @Override
    public void onPostExecute(String string) {
        if(loadMoreList != null){
            if(loadMoreList.size() > 0){

                eventList.clear();
                eventList.addAll(loadMoreList);
                myAdapter = new MyAdapter(thisContext, eventList);
            } 
      }
}
private类GetList扩展了异步任务{
ArrayList loadMoreList;
@凌驾
公共字符串doInBackground(字符串…参数){
loadMoreList=WebFunctions.getEventList(参数[0],参数[1],参数[2],参数[3]);
返回null;
}
@凌驾
公共无效onPreExecute(){
}
@凌驾
public void onPostExecute(字符串){
如果(loadMoreList!=null){
如果(loadMoreList.size()>0){
eventList.clear();
addAll(loadMoreList);
myAdapter=新的myAdapter(此上下文,事件列表);
} 
}
}
代码以获取列表中的更多项

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

    ArrayList<String> loadMoreList;
    @Override
    public String doInBackground(String... params) {
        loadMoreList = WebFunctions.getEventList(params[0] ,params[1], params[2], params[3]);

        return null;
    }

    @Override
    public void onPreExecute() {

        }

    @Override
    public void onPostExecute(String string) {
        if(loadMoreList != null){
            if(loadMoreList.size() > 0){
                eventList.addAll(loadMoreList);
                myAdapter.notifyDataSetChanged();
        }
    }        
}
私有类LoadMoreList扩展了异步任务{
ArrayList loadMoreList;
@凌驾
公共字符串doInBackground(字符串…参数){
loadMoreList=WebFunctions.getEventList(参数[0],参数[1],参数[2],参数[3]);
返回null;
}
@凌驾
公共无效onPreExecute(){
}
@凌驾
public void onPostExecute(字符串){
如果(loadMoreList!=null){
如果(loadMoreList.size()>0){
addAll(loadMoreList);
myAdapter.notifyDataSetChanged();
}
}        
}

实际上问题出在HeaderListView库中,但现在错误已被修复。
从中可以看出问题已经解决。

您必须从主UI线程调用
myAdapter.notifyDataSetChanged();
,onPostExecute被认为是UI线程。从这里调用LoadMoreList()这个类日志cat文本而不是名为myAdapter.notifyDataSetChanged()的图像,仍然会因相同的错误而崩溃。