1

我正在为 twitter 应用程序开发一个搜索组件。我一直在常规课程中进行解析,并尝试以这种方式将视图添加到活动中,但没有奏效。在我的帖子中:
Android 2.3.3: Crash when getting a LinearLayout from (LinearLayout)findViewById(R.id.<linear_layout_id>)
一位非常有用的 stackoverflow 用户告诉我,我最好的选择是将所有解析调用放入 asynctask 和将视图添加到 onPostExecute() 上的活动。

所以我的问题是,我可以从 XML 中选择一个布局,添加一个视图,然后将它保存在 asyctask 的 onPostExecute() 中吗?

4

2 回答 2

2

是的,当然,要么传递视图,要么将包含视图的 Activity 传递给 AsyncTask 的构造函数。只要确保您不在 doInBackground 方法中使用这些对象。

事实上,我上周也做了类似的事情:

@Override
protected void onPostExecute(Article[] articles) {
    ArrayAdapter<Article> arrayAdapter = new ArticleAdapter(context, articles);
    listView.setAdapter(arrayAdapter);
    listView.setVisibility(View.VISIBLE);
    progressBar.setVisibility(View.GONE);
}

listView 是作为构造函数参数传递的 ListView,与 context 相同,即包含视图的 Context(活动)。

编辑:假设您定义 AsyncTask 然后:

  • doInBackground 必须返回一个 Class3 对象并将 Class1 对象数组(定义为 Class1...)作为参数
  • onProgressUpdate 必须将 Class2 对象数组(定义为 Class2...)作为参数
  • onPostExecute 必须将 Class3 对象作为参数
  • ...

有关更多信息,您可以阅读 Android 文档:http: //developer.android.com/reference/android/os/AsyncTask.html

于 2012-07-28T21:15:40.653 回答
1

在 onPostExecute 中使用 runOnUiThread(mRunnable) 方法。如果您想对 ui 进行任何更改,则全部更改为 runOnUiThread。

于 2012-07-30T11:29:53.940 回答