我有一个主要的活动,我为arraylist数据创建一个适配器。 我使用与Jsoup的单独帖子从网站上阅读新闻。
在onCreate()中我有
this.newsItemAdapter = new NewsItemAdapter(this,
R.layout.newsitem_row,NewsItemAdapter.getAllNews());
parseThread.start();
this.newsItemAdapter.notifyDataSetChanged();
当我从适配器读取时,我得到空列表。这是因为线程尚未完成。我对如何进行有任何想法吗?
我无法在我的线程中执行notifyDataSetChanged,因为它不是适配器的所有者。
答案 0 :(得分:0)
将适配器传递给构造函数中的线程。然后你的线程可以调用notifyDataSetChanged。
答案 1 :(得分:0)
你需要在单独的线程完成后通知,并在UI线程上调用notifyDataSet,一种可能的方法是使用handler,
您可以在activity中定义处理程序,在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而不是单独的线程,在task的doInBackground方法中使用jsoup,在onPostExecute中使用notifyDataSet。
处理程序文档为http://developer.android.com/reference/android/os/Handler.html,AsyncTask为http://developer.android.com/reference/android/os/AsyncTask.html。