2017-01-12 2 views
0

私はと別ファイルにあります。contextと一緒に、ImageViewをコンストラクタの引数として渡しています。 AsyncTaskがonPostExecute()メソッドを入力すると、ImageViewにイメージが割り当てられます。nullをコンストラクタに渡すのを避けてください。

後で同じコードをアプリの別の部分に使用する必要があることを認識しましたが、画像をImageViewに割り当てる代わりに、FrameLayoutに背景画像として割り当てる必要があります。

AsyncTaskを再利用するにはどうすればよいのでしょうか?重複はプログラミングの多くのエラーの根源ですので、両方のケースを処理してコピー/ペーストコードを避けることができますか?

私は、コンストラクタなどで試してみました:私はImageViewまたはFrameLayoutとしてnullのいずれかを設定するが、それは右の私には感じていません

public DownloadImageAsyncTask(Context context, ImageView ivCover, FrameLayout flCover) { 
    this.context = context; 
    this.ivCover = ivCover; 
    this.flCover = flCover; 
} 

。 (なぜなら私はnullをパラメータとして渡すのを避けるべきだと知っているから)

アイデア?

答えて

1

DownloadImageAsyncTaskクラスの中で、オーバーロードされたコンストラクタを使用することができます。これは、異なる名前を持つ複数のメソッドを同じ名前で使用する方法と非常によく似ています。あなたは、私は別々のコンストラクタのオーバーライドとどうなるだけでなく、いくつかのnullチェックに

if(result instanceOf ImageView) 
{ 
    // do stuff 
} 
else if(result instanceOf FrameLayout) 
{ 
    // do stuff 
} 
else 
{ 
    // do other stuff 
} 
+1

ありがとうございました!私はそれを考えましたが、 'onPostExecute()'で再度View(imageViewまたはFrameLayout)を使ってイメージを追加する方法を教えてください。 – Mes

+1

その質問に答えるために私の答えを編集 –

+0

しかし、「ivCover」は常にinstanceOf ImageViewになります。 AsyncTaskで既に2つの変数を宣言しているので、flCoverは常に 'FrameLayout'のインスタンスになります:' ImageView ivCover; FrameLayout flCover; – Mes

1

を振りかけるしたいかもしれないが

public DownloadImageAsyncTask(Context context, ImageView ivCover) 
{ 
    this.context = context; 
    this.ivCover = ivCover; 
} 

public DownloadImageAsyncTask(Context context, FrameLayout flCover) 
{ 
    this.context = context; 
    this.flCover = flCover; 
} 

は、あなたが次のことを行うことができ、あなたの結果変数の実行中のインスタンスを確認するには ImageViewおよび FrameLayout。その後、 AsyncTaskのメソッドは Objectをパラメータとして使用し、 onPostExecute(Object result)にチェックしてください if(result instanceOf ImageView) else

関連する問題