Android:从适配器和活动共享数据

时间:2013-01-20 00:45:32

标签: java android android-arrayadapter

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

在onCreate()中我有

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

当我从适配器读取时,我得到空列表。这是因为线程尚未完成。我对如何进行有任何想法吗?

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

2 个答案:

答案 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