的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的地方。

有没有人有解决这个问题?

TextViewparams的第一个元素:

TextView tv = params[0]; 

注:

如果您计划修改TextViewdoInbackground()不要这样做是因为你会抛出一个异常(你不能修改另一个线程的视图,而是使用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]作为参数。无论您在参数列表中看到哪个...,都可以传递一个值,一个序列或一个数组。 (单值实际上是一个只包含一个元素的序列。)