的AsyncTask与TextView的参数
我有在类加载一个TextView的的AsyncTask,所以它看起来是这样的:的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的地方。
有没有人有解决这个问题?
你TextView
是params
的第一个元素:
TextView tv = params[0];
注:
如果您计划修改TextView
在doInbackground()
不要这样做是因为你会抛出一个异常(你不能修改另一个线程的视图,而是使用onPostExecute
方法)。
您不能更改AsyncTask.doInBackground()方法的方法签名。
它被定义为一个可变参数,所以你必须传递一个TextView []参数给你的AsyncTask。
尝试 Arrays.asList(tv);
如果你想传递一个TextView的,你需要在MyClass的定义Construcotr然后TextView的存储为MyClass的一个领域。 当心虽然这样做,你不应该在你的任务中持有视图或上下文的引用。这会阻止Android操作系统从垃圾收集拥有TextView的活动,并可能导致内存泄漏。如果你必须保持你的AsyncTask视图或上下文参考,使用这样的:
private class MyClass extends AsyncTask<TextView, Void, Void>{
private WeakReference<TextView> tvRef;
public MyClass(TextView tv) {
this.tvRef = new WeakReference<TextView>(tv);
}
}
刚才看了params[0]
作为参数。无论您在参数列表中看到哪个...
,都可以传递一个值,一个序列或一个数组。 (单值实际上是一个只包含一个元素的序列。)