2015-10-01 1 views
-1

J'essaie de modifier la disposition de mon activité via AsyncTask.Impossible d'utiliser setContentView à partir d'AsyncTask

En onPostExecute() Je vous appelle:

MyActivity.this.setContentView(R.layout.activity_sub); 

mais il ne me laissera pas, en disant: "MyActivity n'est pas une classe englobante".

Quelqu'un peut-il aider s'il vous plaît?

+0

Où appelez-vous et implémentez-vous AsynkTask? Vous pouvez donner à l'AsyncTask l'activité en tant que rappel, puis appeler setContentView(). –

+0

Peut-être que cela pourrait vous aider: http://stackoverflow.com/questions/14116415/mainactivity-this-is-not-an-closion-class-asynctask – Prexx

+0

Cela devrait fonctionner si vous incorporez la classe AsyncTask en tant que classe interne du activité. –

Répondre

0

Ne devrait pas avoir besoin de 'MyActivity.this'; le ci-dessous fonctionne pour moi:

public class MyAsyncTask extends AsyncTask<Void, Void, Integer> { 

    @Override 
    protected Integer doInBackground(Void... params) { 
     return R.layout.activity_home; 
    } 

    @Override 
    protected void onPostExecute(Integer result) { 
     super.onPostExecute(result); 

     setContentView(result); 
    } 
} 
0

Je pense que c'est une mauvaise façon de changer la disposition de l'activité en rutime. Si vous souhaitez afficher un écran avec une autre mise en page, vous devez utiliser des fragments ou créer une autre activité et définir votre mise en page.

0

Cela devrait fonctionner si vous incorporez la classe AsyncTask en tant que classe interne de l'activité.

public class MyActivity extends Activity { 
    ... 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 

    ... 
    public class MyAsyncTask extends AsyncTask<Void, Void, ...> { 

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

     @Override 
     protected void onPostExecute(... result) { 
      super.onPostExecute(result); 
      setContentView(R.layout.activity_sub); 
     } 
    } 

}