如何使用Android中的AsyncTask更新listview上的数据?

时间:2014-07-07 21:41:03

标签: android

我是这里的新手,我已经在网上(以及在stackoverflow上)搜索答案,但我仍然在努力使其发挥作用。

我想做的是(1)使用异步任务更新我的列表和新的“帖子” - 从而允许用户在我将新帖子下载到他们的android时继续使用该应用程序。

我正在努力让更新任务发挥作用,它可能与明显的实施问题(或不是)挂钩。

我所拥有的是(1)一个自定义列表(它允许“拉动刷新” - 但正如所述,这是一个问题,此时它没有刷新任何数据)。 (2)自定义AsyncTask,理论上会在主屏幕上为主列表填充更多帖子。

以下是列表中的问题点:

listView.setOnRefreshListener(new PullToRefreshListView.OnRefreshListener(listView) {
        @Override
        public void onRefresh() {

            mylistAdapter.loadNewData(); //loads new data <-------------------

m_ptrlistView.postDelayed(new Runnable(){

                @Override
                public void run() {
                    m_ptrlistView.onRefreshComplete();
                }
            }, 2000);

//////////// 这是适配器中的“loadNewData”函数

public void loadNewData(PullToRefreshListView List){

    //load new stuff
    new AsyncFetchMore(list).execute();

    // MANDATORY: Notify that the data has changed
    notifyDataSetChanged();

    return;
}

并且...我的asyncTask是扩展的实现

@Override
protected Object doInBackground() {

    try {
        //simulating a long task
        Thread.sleep(5000);
    } catch (InterruptedException e) {
        Log.d("Notes", "Thread failed to sleep");
    }

    //create dummy posts for testing
    for ( int i = 12; i < 24; i++ ) {
        Post pNewPost = new Post();
        pNewPost.setText("POST # " + i);
        m_alNewPosts.add(pNewPost);
    }

    return null;
}

///////////////////////////////

也许我接近这一切都错了。我有疑虑...但我只是不知道下一步是什么,我在这里迷失了!你能给我一些提示吗?

2 个答案:

答案 0 :(得分:0)

看起来你不会对你的异步任务返回的结果做任何事情。但在你去修复它之前,请考虑使用Loaders - 它们是异步的,专门针对你的purpouse - 获取Fragment / Activity的数据。这是documentation。如果你想要实现它们,你可能会有相当多的重构,但它是值得的 - 它是正确的方式。希望这有帮助。

答案 1 :(得分:0)

您在启动Async线程后立即调用notifyDataSetChanged(),该线程尚未填充您的数据。数据更新后调用notifyDataSetChanged()。查看SDK示例目录中ApiDemos中的示例。