#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()