2017-01-04 2 views
1

Ich habe eine Klasse, die für verschiedene ASyncTasks verwendet wird. Manchmal muss ich bestimmte Schaltflächen, Ansichten oder was auch immer basierend auf der Aktivität oder Aktion ausblenden. Das Objekt, das die Sichtbarkeit benötigt, kann variieren.Überschreiben und Überschreiben in einer ASync-Klasse

MyAsyncTask

public class MyAsyncTask extends AsyncTask<String, Void, JSONObject> { 

    private ProgressBar mProgressBar; 
    public ASynceResponse delegate = null; 

     public MyAsyncTask() { 
      this.delegate = delegate; 
      this.mProgressBar = progressBar; 
     } 

     @Override 
     protected void onPreExecute() { 
      mProgressBar.setVisibility(View.VISIBLE); 
     } 

     @Override 
     protected JSONObject doInBackground(String... params) { 
      return; 
     } 

     @Override 
     protected void onPostExecute(JSONObject data) { 
      mProgressBar.setVisibility(View.GONE); 
      delegate.processResults(data); 
     } 


    public interface ASyncResponse { 
     void processResults(JSONObject data); 
    } 

    } 

Ich nenne es in der Regel von:

new MyAsyncTask(this, mProgressBar).execute("Something","Something Else",null); 

die ich in einem ProgressBar in der Aktivität übergeben, die die Hintergrundaktion zeigt geschieht.

Aber ich will mehr. Ich möchte Overide meine Klassen onPreExecute und onPostExecute auch andere Elemente zu verstecken/zeigen.

Ist das möglich?

Aber ich versuche, einen Weg zu finden, um die onPreExecute OverideType (oder viele Arten) Ansichten zu verbergen.

Ist so etwas möglich?

MyAsyncTask myAsyncTask = new MyAsyncTask(new onPreExecute(
       // hide a view 
)); 
+0

können Sie Rückrufe auf die Aktivität von 'onPreExecute' und' onPostExecute' und Ansichten entsprechend in Aktivität aktualisieren. 'new onPreExecute (' ist falsch. Sie können auch Fortschrittsbalken in der Aktivität selbst aktualisieren (ausblenden oder anzeigen) – Raghunandan

+0

Aber wie sage ich onPreExecute * was * Ich möchte @Raghunandan? –

+0

ackoverflow.com/questions/9963691/android- asynctask-sending-callbacks-to-ui Sie wissen, was Sie in "onPreExecute" tun sollten, implementieren Sie das gleiche in der Callback-Methode in Aktivität – Raghunandan

Antwort

1

Sie können dies über die Schnittstelle tun.

public class MyAsyncTask extends AsyncTask<String, Void, JSONObject> { 

    private ProgressBar mProgressBar; 
    public ASynceResponse delegate = null; 

     public MyAsyncTask() { 
     this.delegate = delegate; 
     this.mProgressBar = progressBar; 
     } 

     @Override 
     protected void onPreExecute() { 
      delegate.myOnPreExecute(); 
      mProgressBar.setVisibility(View.VISIBLE); 
     } 

     @Override 
     protected JSONObject doInBackground(String... params) { 
      return; 
     } 

     @Override 
     protected void onPostExecute(JSONObject data) { 
      mProgressBar.setVisibility(View.GONE); 
      delegate.processResults(data); 
     } 


     public interface ASyncResponse { 
      void processResults(JSONObject data); 
      void myOnPreExecute(); 
     } 

    } 

Demo-Klasse Beispiel

class Demo implements ASyncResponse{ 
     ..... 
     void processResults(JSONObject data){ 
     .... 
     } 
     void myOnPreExecute(){ 
     // do your stuff for pre execute 
     } 

    } 
+1

Oh ok! Ich habe nicht darüber nachgedacht, einfach einen weiteren Delegiertenmethodenaufruf zu erstellen. –