我在AsyncTask
的单独文件中有一个DownloadImageAsyncTask
.Java和我传递context
,ImageView
作为参数构造函数。当AsyncTask进入onPostExecute()
方法时,它会将图像分配给ImageView
。
稍后我意识到我需要将相同的代码用于我的应用的其他部分,但不是将图像分配给ImageView
,而是将其作为背景图像分配给FrameLayout
。< / p>
由于重复是编程中很多错误的根源,我如何重用AsyncTask
以便它可以处理这两种情况并避免复制/粘贴代码?
我尝试使用如下构造函数:
public DownloadImageAsyncTask(Context context, ImageView ivCover, FrameLayout flCover) {
this.context = context;
this.ivCover = ivCover;
this.flCover = flCover;
}
我将ImageView
或FrameLayout
设置为null,但这对我来说并不合适。 (因为我知道我们应该避免将null作为参数传递)
有什么想法吗?
答案 0 :(得分:1)
您可以在DownloadImageAsyncTask
类中使用所谓的重载构造函数。它与如何使用具有相同名称的多个具有不同参数的方法非常相似。
public DownloadImageAsyncTask(Context context, ImageView ivCover)
{
this.context = context;
this.ivCover = ivCover;
}
public DownloadImageAsyncTask(Context context, FrameLayout flCover)
{
this.context = context;
this.flCover = flCover;
}
要检查结果变量的运行实例,您可以执行以下操作,但您可能还需要进行一些null
检查
if(result instanceOf ImageView)
{
// do stuff
}
else if(result instanceOf FrameLayout)
{
// do stuff
}
else
{
// do other stuff
}
答案 1 :(得分:1)
我会使用单独ImageView
和FrameLayout
的构造函数覆盖。然后在AsyncTask
个方法中使用Object
作为参数,在onPostExecute(Object result)
中只需检查if(result instanceOf ImageView)
else