我有一个AsyncTask,在类中加载了textview,所以它看起来像这样:
private class MyClass extends AsyncTask<TextView, Void, Void>{
}
TextView tv;
以这种方式加载
"new MyClass(tv).execute();"
这是因为我在viewflipper中加载了textview,并且我在任务中有一个长加载方法来实现一个进程对话框 .
我的错误发现在“protected Void doInBackground(TextView ... params){”这是params是TextView []但不是单个TextView .
有没有人有这个问题的解决方案?
3 回答
您的
TextView
是params
中的第一个元素:NOTE:
如果您打算在
doInbackground()
don't 中修改TextView
,请执行此操作,因为您要从另一个线程修改视图,而是使用onPostExecute
方法) .您无法更改AsyncTask.doInBackground()方法的方法签名 .
它被定义为采用varargs参数,因此您必须将TextView []参数传递给AsyncTask .
试试
Arrays.asList(tv);
如果要传递单个TextView,则需要在MyClass中定义Construcotr,然后将TextView存储为MyClass中的字段 . Beware 尽管如此,您不应该在任务中持有对视图或上下文的引用 . 这将阻止Android操作系统垃圾收集拥有TextView的活动,并可能导致内存泄漏 . 如果必须在AsyncTask中保留对视图或上下文的引用,请使用以下内容:
只需阅读
params[0]
作为参数 . 您可以在参数列表中看到...
的任何位置传递单个值,序列或数组 . (单个值实际上是一个只包含一个元素的序列 . )