所以我有这个listfragment显示来自localdatabase的数据。 localdatabase来自远程服务器。所以这个过程非常像
显示数据。
public void onFragmentViewCreated(ListFragment fragment, Activity activity){
mDialog = new ProgressDialog(this);
mDialog.setMessage("Loading Feed");
mDialog.setCancelable(false);
mReminderList = new ArrayList<Reminder>();
final ListFragment mFragment = fragment;
final Activity mActivity = activity;
mHelper = new ReminderHelper(this);
new AsyncTask<Void, Void, List<Reminder>>(){
@Override
protected void onPreExecute(){
// getting data from server
mHelper.fetchFeed();
// show dialog
showDialog();
}
@Override
protected List<Reminder> doInBackground(Void... params){
// getting data from database
mReminderList = mHelper.getFeed();
return mReminderList;
}
@Override
protected void onPostExecute(List<Reminder> reminders){
mFeedAdapter = new FeedAdapter(mActivity, reminders);
mFeedAdapter.notifyDataSetChanged();
mFragment.setListAdapter(mFeedAdapter);
// hide dialog and show the data
hideDialog();
}
}.execute();
}
我的代码有效。但问题是,在重新启动活动之前,listfragment没有显示数据。 (并没有出现进度对话框)。我想要实现的是listfragment在数据库更新后立即显示数据(在从服务器获取数据时使用进度对话框)。提前谢谢..
答案 0 :(得分:0)
尝试交换这两行
mFeedAdapter.notifyDataSetChanged();
mFragment.setListAdapter(mFeedAdapter);
当适配器设置为ListView
时,视图会附加一个Observer
,用于侦听适配器中的更改。调用notifydatasetchanged
方法会通知所有附加的观察者。在您的情况下,您没有附加观察者,因为您在将适配器设置为ListView
之前调用该方法。
答案 1 :(得分:0)
使用CursorLoader
从本地数据库中获取最新的结果。或者,在数据库上附加observer
以检查其更新事件并相应地更新列表。