2012-07-28 60 views
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()?Android AsyncTask:将视图添加到AsyncTask中的活动?

回答

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。

编辑:说你定义的AsyncTask然后:

  • doInBackground必须返回一个Class3的对象,并采取的Class1对象数组(定义为1类...)作为参数
  • onProgressUpdate必须采取一等级2物体的阵列(定义为等级2 ...)作为参数
  • onPostExecute必须采取Class3的对象作为参数
  • ...

欲了解更多信息,你可以阅读的Android文档:在onPostExecute.If http://developer.android.com/reference/android/os/AsyncTask.html

+0

因此,类定义将是
public MyTask extends AsyncTask ? – ceptno 2012-07-28 21:39:57

+0

不,构造函数参数与AsyncTask的类定义无关。 (编辑答案作为评论中的布局不是为此做的)。这只会是如果你将它传递给execute方法的情况。 – 2012-07-28 21:58:48

+0

要添加视图,我必须1.在onPostExecute和2.pass Class3中将它做为布局或上下文吗? – ceptno 2012-07-28 22:03:10

1

使用runOnUiThread(mRunnable)方法要进行任何更改到用户界面的所有变化成runOnUiThread。