Расширяемый список просмотра не обновляется после завершения выполнения AsyncTask

#android #android-asynctask #expandablelistview

#Android #android-asynctask #расширяемый список просмотра

Вопрос:

У меня есть расширяемый список просмотра, который создается как часть действия:

     @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.news);

    // create the exandable list view widget
    newsListAdapter = new NewsListAdapter(this.getApplicationContext());    

    newsListView = (ExpandableListView) findViewById(R.id.news_list_view);

    newsListView.setAdapter(newsListAdapter);

    final Button homeButton = (Button) findViewById(R.id.home_btn);

    // go back to the home page
    homeButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {                
            startActivity(new Intent(view.getContext(), HomeActivity.class));
        }
    });   

    newsListView.setOnGroupClickListener(new OnGroupClickListener() {
        public boolean onGroupClick(ExpandableListView parent, View view, int groupPosition, long arg3) {
            return false;
        }
    });

    newsListView.setOnChildClickListener(new OnChildClickListener() {
        public boolean onChildClick(ExpandableListView parent, View view, 
                                    int groupPosition, int childPosition, long id) {
            return false;
        }
    });

    showLoadingProgressDialog();

    downloadRssFeedTask = new DownloadRssFeedTask();

    downloadRssFeedTask.execute();
}  
  

как вы можете видеть из кода, он отключается и выполняет извлечение из RSS-канала в AsyncTask.

AsyncTask завершается, диалоговое окно выполнения закрывается, и activity сообщает, что задача завершена:

    private void responseReceived(Channel newsResponse) {
    if (newsResponse != null)           
        newsListAdapter.buildView(newsResponse);
    }
    else {
    Toast toast = Toast.makeText(this.getApplicationContext(), 
                           "There is no news available at this time.", 
                           Toast.LENGTH_LONG);

        toast.show();
    }
}
  

Однако расширяемый список просмотра не перерисовывается / обновляется сам по себе после загрузки данных, это пустой экран. Как заставить расширяемый список просмотра обновляться с помощью данных RSS? Я пробовал invalidate и refreshDrawableState , но радости не было.

Мысли?

Комментарии:

1. Ого! <Бьется головой о стол, сокрушаясь, что не вернет последние два часа жизни.> Волшебный ответ находится notifyDataSetChanged() в классе адаптера.

Ответ №1:

Я думаю, вы забыли вызвать notifyDataSetChanged() метод на адаптере после загрузки RSS-канала (вероятно, вам следует вызвать его в onPostExecute() методе в вашем AsyncTask ).

Ответ №2:

Это должно сработать.

 newsListAdapter.notifyDataSetChanged()