Android AsyncTask:为AsyncTask中的活动添加视图?

时间:2012-07-28 21:02:04

标签: android android-layout twitter android-asynctask

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

在onPostExecute中使用runOnUiThread(mRunnable)方法。如果你想对ui进行任何更改,将所有更改改为runOnUiThread。