2015-10-01 27 views
-1

我想通過AsyncTask更改我的Activity的佈局。不能從AsyncTask中使用setContentView

在onPostExecute()我打電話:

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

,但它不會讓我,說: 「MyActivity不是一個封閉類」。

任何人都可以請幫忙嗎?

+0

你在哪裏打電話和實施AsynkTask?您可以將AsyncTask作爲回調的活動,然後調用setContentView()。 –

+0

也許這可以幫助你:http://stackoverflow.com/questions/14116415/mainactivity-this-is-not-an-enclosing-class-asynctask – Prexx

+0

它應該工作,如果你嵌入AsyncTask類作爲內部類的活動。 –

回答

0

不應該需要'MyActivity.this。';下面適用於我:

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

我認爲這是一個錯誤的方式來改變活動中的佈局。如果你想顯示另一個佈局的屏幕,你應該使用片段或創建另一個活動,並設置你的佈局。

0

如果您將AsyncTask類嵌入爲活動的內部類,它應該可以工作。

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); 
     } 
    } 

}