2012-03-10 46 views
0

我在主佈局上使用了「include」。它們中的每一個都是需要附加OnClick偵聽器的RelativeLayout,並更新一些相關信息。 所以我試着簡單地做到這一點:如何在調用「setContentView」之後執行命令

setContentView(R.layout.allobjects); 
    ObjectListeners objectListeners = new ObjectListeners(objects); 
    for(int i=0;i<1;i++) 
    {   
     RelativeLayout objectBoxRelativeLayout = (RelativeLayout)findViewById(R.id.object1 + i);    
     objectBoxRelativeLayout.setOnClickListener(objectListeners.GetObjectListener(i)); 
     SomeObject currentObject = this.objects.get(i); 
     Object viewObject = findViewById(R.id.object1 + i); 
     this.setObjectView(viewObject, currentObject);   
    } 

的問題是,它需要後太長「的setContentView(R.layout.allobjects);」命令,應用程序將顯示黑屏,直到完成加載。 另外,我使用「setContentView(R.layout.allobjects);」我執行上述命令後。所有這些命令都必須寫在「setContentView(R.layout.allobjects);」之後。

我該如何處理這種情況?我必須使用onPreExecute並實現AsyncTask嗎?

回答

0

是的,AsyncTask是在執行這些命令時顯示加載對話框的好辦法。

UPDATE:

添加這個類在你onCreate()功能:

private class MyTask extends AsyncTask<Void, Void, Void> { 

      private ProgressDialog dialog; 
      private Context context; 

      public MyTask(Activity activity) { 
       context = activity; 
       dialog = new ProgressDialog(context); 
      } 

      protected void onPreExecute() { 
       dialog.setTitle("Loading..."); 
       dialog.setMessage("Loading..."); 
       dialog.show(); 

      } 

      @Override 
      protected Void doInBackground(Void... params) { 
      //do your code here in background 


      protected void onPostExecute(Void res) { 
       dialog.dismiss(); 

      } 
} 

然後用裏面的任務onCreate()這樣的:

MyTask mt = new MyTask(this); 
    mt.execute(); 
+0

謝謝。那麼沒有其他選擇嗎?你能告訴我一些代碼片嗎? – ohadinho 2012-03-10 17:17:21

+0

有另一種方式使用線程,但asynctask是更好的方式..我會編輯我的答案,告訴你代碼 – 2012-03-10 17:19:58

+0

非常感謝! – ohadinho 2012-03-10 17:29:16

相關問題