Итак, у меня есть этот ListView, который использует мой собственный массивный адаптер. Он отлично работает, получает данные из базы данных и т. Д., Но после его установки обновление не происходит. У меня есть эта деятельность, которая делает что-то для результата, и когда он возвращается, я называю это:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==1899)
{
//a new client was added to the list...
try {
clients = (ArrayList<ClientsData>) clientsDataDao.queryForAll();
} catch (SQLException e) {
// TODO Auto-generated catch block
}
theClients.notifyDataSetChanged(); //this is not working here
showClientDetails(mCurrentSelectedItemIndex); //update other fragment.
}
}
Проблема в том, что notifyDataSetChanged()
на самом деле ничего не делает. Я продолжил расследование, и я думаю, это должно быть вызвано в потоке пользовательского интерфейса? но я в FragmentActivity, и я не уверен, как это сделать? Возможно, мне придется создать работающий поток и вызвать его оттуда? Не много сделали с потоками, так что не уверены, у кого-нибудь есть хорошие (лаконичные и полные) примеры того, как это сделать? или это даже моя проблема?
(Примечание: я переключился на ORM Lite, до этого у меня в этом конкретном месте было SimpleCursorAdapter
, которое я мог обновить после вызова .requery
на моем курсоре, а затем notifyDataSetChanged()
EDIT:
Хорошо, после нескольких комментариев я исследовал маршрут AsyncTask ...:
private class addViewsToList extends AsyncTask<Void, Void, Boolean>{
protected void onPostExecute(Boolean result) {
theClients.notifyDataSetChanged();
}
@Override
protected Boolean doInBackground(Void... params) {
// TODO Auto-generated method stub
return true;
}
}
а по моему onActivityCreated
:
new addViewsToList().execute();
и на моем onActivityResult(...)
:
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==1899)
{
//a new client was added to the list...
try {
clients = (ArrayList<ClientsData>) clientsDataDao.queryForAll();
} catch (SQLException e) {
// TODO Auto-generated catch block
}
//do I have to reset the adapter?
setListAdapter(theClients);
showClientDetails(mCurrentSelectedItemIndex);
}
Все еще нет обновлений в списке ...
Итак, я продемонстрировал, что понятия не имею, что я делаю :)