2012-02-20 5 views
0

私は以下のように非同期タスクを使用しています。しかし、以下のクラスを使用しているさまざまなアクティビティに基づいて、onPostExecute内で別の関数を呼び出せるようにする必要があります。たとえば、アクティビティがロードされるとき、私はそれをそのまま使用しますが、ユーザがアクティビティのリストアイテムをクリックしたとき、私は同じクラスを使用したいが、コールバックのfunctonは異なる必要がありますか?アンドロイドでこれを行う方法はありますか? (2つのオプションがある場合は、多分アクティビティ例えば、インスタンス、または一部enumaration、またはブール値)アンドロイドのAsyntask

class PerformOPTask extends AsyncTask<Void, String, ServerOutput> { 
    // connector=new JSONConnector(); 
    Connector connector; 
    String curUrl; 
    ServerOutput currentSO; 
    PerformOPTask(String url,ServerOutput serverOutput){ 
     //connector = new UnitTestConnector(); 
     connector = new JSONConnector(); 
     curUrl=url; 
     currentSO=serverOutput; 
    } 

    @Override 
    protected ServerOutput doInBackground(Void... params) { 

     return connector.getData(URLUtils.getFormattedUrl(curUrl),currentSO); 
    } 

    @Override 
    protected void onPostExecute(ServerOutput output) { 
     displayData(output); 
     Toast.makeText(BaseFragmentActivity.this, "Done!", Toast.LENGTH_SHORT).show(); 
    } 
} 

答えて

1

あなたはこのクラスを使用し、()onPostExecuteを呼び出すように機能している人を識別しますどのPerformOPTaskにいくつかのオブジェクトを渡すことができます。

+0

narek.gevorgyan @の溶液を使用するよりも拡張性、およびまだ拡張可能なものを提供することです*複数のクラスからAsyncTaskを呼び出すのに十分な*(Mariaのソリューションはもっとです)。 AsyncTaskクラスの内部メンバに 'Activity'リファレンスを格納し、そのメンバを最初のToastパラメータとして使用するだけです。 – davidcesarino

3

onCompleteメソッドなどを含むインターフェイスをアダプタに追加できます。 AsyncTaskのコンストラクタにインターフェイスを追加することができます。このように:で

public interface OnTaskCompleteListener { 
    void onComplete(ServerOuptput output); 
} 

onPostExecute()あなたがちょうどあなたがそのための依存関係を注入する必要があり、onComplete()

+0

ありがとうございます。私の場合は、非同期タスクを呼び出し、displayDataメソッドも持つスーパークラスがあります。次に、スーパークラスロジックを使って最初にロードするときに、配列アダプタとデータを読み込むサブクラスがあります。ユーザーが特定のエントリをクリックすると、同じ非同期タスクサブクラスを使用してデータをフェッチします。この場合、私のサブクラスのインスタンスを渡すと、私は何の利点も得られません。私は何とか私のasynctaskコールを私のコンストラクタで渡す方法、あるいはより良い方法で行うことができることを願っていました。 – sab

0

どちらの答えが正しい呼び出すことができます。私はAsyncTasksの私の自身のサブクラスのコンストラクタの中にそれらを注入することを好みます。

@Maria Neumayerのソリューションの利点は、それが、より一般的な、より抽象的で、私はこれを実装する方が簡単だと思う

関連する問題