【问题标题】:Refreshing listfragment on database change在数据库更改时刷新 listfragment
【发布时间】:2015-04-24 08:25:04
【问题描述】:

所以我有这个列表片段,它显示来自本地数据库的数据。本地数据库来自远程服务器。所以这个过程很像

  1. 从服务器获取数据并插入数据库。
  2. 从数据库中获取数据并设置为适配器。
  3. 显示数据。

    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 在数据库更新后立即显示数据(在从服务器获取数据时带有进度对话框)。提前谢谢..

【问题讨论】:

  • 尝试在onResume方法执行AsyncTask

标签: android android-fragments android-listview android-sqlite


【解决方案1】:

使用CursorLoader 从本地数据库获取最新结果。或者,在数据库上附加一个observer 以检查其更新事件并相应地更新列表。

【讨论】:

    【解决方案2】:

    尝试交换这两行

        mFeedAdapter.notifyDataSetChanged();
        mFragment.setListAdapter(mFeedAdapter);
    

    当适配器设置为ListView 时,视图会附加一个Observer,用于侦听适配器中的更改。调用notifydatasetchanged 方法会通知所有附加的观察者。在您的情况下,您没有附加观察者,因为您在将适配器设置为 ListView 之前调用了该方法。

    【讨论】:

    • 每次创建FeedAdapter 的新实例时,无需调用notifyDataSetChanged() 方法。我认为您的FeedAdapter 课程有问题。我可以请你发布它以便我审查它吗?
    • @user1378381,您的问题有更新吗?
    猜你喜欢
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    相关资源
    最近更新 更多