0

Я получаю ошибку ниже при выборе элемента в своем AmazingListView. Я загружаю данные через AsyncTask (inBackround()) и вызываю adapter.notifyDataSetChanged() каждые 20 элементов, которые загружаются, и метод onPostExecute. Список загружается без каких-либо проблем, и когда я выбираю элемент после загрузки списка, у меня нет проблем ... Я получаю эту ошибку только при выборе элемента во время загрузки списка. Существует проблема, открытая в AmzingListView here, но оба решения мне не помогли. Любые идеи были бы восприимчивыми.Ошибка при загрузке AmazingListView с помощью AsyncTask

Ошибка:

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(2131034170, class com.foound.widget.AmazingListView) with Adapter(class android.widget.HeaderViewListAdapter)] 

Код:

private ArrayList<object> list; 


private class AsyncTask extends AsyncTask<Void, object, Void> 
{ 

    @Override 
    protected void onPreExecute() 
    { 

        list = populatList(); 

     super.onPreExecute(); 
    } 

    @Override 
    protected Void doInBackground(Void... urls) 
    { 
        Log.i("CallLogActivity", "CallLog is Loading"); 
     for (int i = 0; i < list.size(); i++) 
       { 

        String str = getString(); 
        boolean bool = getBoolean(); 
        Object c = new Object(str,bool); 
        publishProgress(c); 
       } 

     //Doing Work Here!! 

     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) 
    { 
      adapter.notifyDataSetChanged(); 
    } 

    @Override 
    protected void onProgressUpdate(object... object) 
    {   
     count++ 
        updatelist(object); 
     if (adapter != null) 
     { 
      if (count > 20) 
      { 
       adapter.notifyDataSetChanged();   
       count = 0; 
      } 
     } 
     super.onProgressUpdate(object); 
    } 
} 
+0

Вы меняете содержимое адаптера в коде "do work"? (поскольку я отмечаю, что ваш postExecute является «Void») – Tom

+0

yes Я изменяю содержимое адаптера во время «выполнения работы». Я вижу, что он постоянно обновляется. Проблема в том, когда я выбираю элемент в списке. – user1163234

+0

Вы проверили, не сообщает ли об этом сообщение об ошибке, как первый шаг, поместите части кода, которые изменяют адаптер в runOnUIThread (Runnable ...). (http://developer.android.com/reference/android/app/Activity.html#runOnUiThread(java.lang.Runnable)) – Tom

ответ

1

Оказывается, мой вопрос был вызовом adapter.notifyDataSetChanged(); только после 20 изменений. Мне нужно адаптор.notifyDataSetChanged(); после каждого изменения .... нашел его here

+0

Я рад, что вы разработали свою проблему. Но вы видите, что вы * меняли содержимое адмастера! Это сообщение об ошибке не лежит здесь. – Tom