-1

我有一个主要活动,我为 arraylist 数据创建一个适配器。我使用带有 Jsoup 的单独线程从网站上阅读新闻。

在 onCreate() 我有

this.newsItemAdapter = new NewsItemAdapter(this, 
                       R.layout.newsitem_row,NewsItemAdapter.getAllNews()); 
parseThread.start();
this.newsItemAdapter.notifyDataSetChanged();

当我从适配器读取时,我得到空列表。这是因为线程还没有完成。关于我应该如何进行的任何想法?

我不能在我的线程内执行 notifyDataSetChanged,因为它不是适配器的所有者。

4

2 回答 2

0

在其构造函数中将适配器传递给您的线程。然后你的线程可以调用 notifyDataSetChanged。

于 2013-01-20T01:06:33.137 回答
0

您需要在单独的线程完成后通知,并在 UI 线程上调用 notifyDataSet,一种可能的方法是使用处理程序,

你可以在activity中定义一个handler,在handleMessage中调用notifyDataSet变化,比如

handler = new android.os.Handler() {
        @Override
        public void handleMessage(Message msg) {
            newsItemAdapter.notifyDataSetChanged();
        }
}

在线程运行方法中,您需要向处理程序发送消息,

public void run() {
   // add this to the end
   Message msg = new Message()
   handler.sendMessage(msg);
}

或者你可以使用 AsyncTask 而不是单独的线程,在任务的 doInBackground 方法中使用 jsoup,在 onPostExecute 中使用 notifyDataSet。

处理程序文档是http://developer.android.com/reference/android/os/Handler.html,AsyncTask 是http://developer.android.com/reference/android/os/AsyncTask.html

于 2013-01-20T01:15:09.313 回答