2012-09-06 121 views
2

如何在活動之間的長時間過渡期間安裝旋轉的進度欄(或對話框)?我見過有助於實現AsyncTask的解決方案 - 我在文章中提到鏈接將爲How to display progress dialog before starting an activity in Android?,但問題在於進度條並未旋轉。如何在開始活動之前顯示進度對話框

package expir.java.file; 

import java.io.IOException; 

import javax.xml.parsers.ParserConfigurationException; 

import org.xml.sax.SAXException; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Intent; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.Window; 
import android.widget.Button; 

public class ExpirActivity extends Activity {  
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.main);   
     Button mapButton = (Button)findViewById(R.id.first_button); 
     mapActivityIntent = new Intent(this, MyMapActivity.class); 
     pDialog = new ProgressDialog(this); 

     mapButton.setOnClickListener(new View.OnClickListener() {   
      public void onClick(View v) { 
       pDialog.setMessage("Loading..."); 
       new MyTask(pDialog).execute();    
      } 
     }); 

     Button downloadButton = (Button)findViewById(R.id.second_button);   
     downloadButton.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) {    
       as.DownloadFromUrl("0", "null");; 
      } 
     }); 
     Button parseButton = (Button)findViewById(R.id.third_button);   
     parseButton.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) {    
       SAXParserCreateDataBase gi = new SAXParserCreateDataBase(); 
       try { 
        gi.start(ExpirActivity.this); 
       } catch (SAXException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (ParserConfigurationException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
     }); 
     Button updateButton = (Button)findViewById(R.id.fourth_button);   
     updateButton.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) {    
       SAXParserCreateDataBase gi = new SAXParserCreateDataBase(); 
       try { 
        gi.update(ExpirActivity.this); 
       } catch (ParserConfigurationException e) { 
        e.printStackTrace(); 
       } catch (SAXException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    }  

    public class MyTask extends AsyncTask<Void, Void, Void> { 
      public MyTask(ProgressDialog progress) { 
      this.progress = progress; 
      } 

      public void onPreExecute() { 
      progress.show(); 
      } 

      public Void doInBackground(Void... unused) { 
      startActivity(mapActivityIntent); 
      return null;    
      } 

      public void onPostExecute(Void unused) { 
      progress.dismiss(); 
      } 
      ProgressDialog progress; 
    } 


    DownloadPrimaryDate as = new DownloadPrimaryDate(); 
    Intent mapActivityIntent; 
    ProgressDialog pDialog; 
} 

UPDATE:

logcat的結果:

FirstActivity.onCreate()

FirstActivity.onStart()

FirstActivity.onResume()

FirstActivity。 onPause()

SecondActivity.onCreate()

SecondActivity.onStart()

SecondActivity.onResume()

FirstActivity.onStop()

這就解釋了爲什麼有那麼。

UPDATE
在我明白我在想 - 不是所有我的嘗試之間的活動甚至實現這種轉變。

+0

分享代碼。 –

+0

如果你實際上是在兩個活動之間......你認爲你的進度條出現在哪個VIEWGROUP上? 由於UI被阻止,progreeBar被掛起! 我不認爲你可以在兩個活動之間顯示ProgressBar ...(在第一個onDestroy之前和第二個onCreate之前) –

+0

@Aditya Nikhade你的陳述是有道理的,但是 - 據我所知,AsincTask允許單獨顯示活動中的對話本身(也許我錯了)。我不明白你可以如何在我設想的printsygt中實現 - 我試圖爲此分配一個單獨的線程,並執行代碼,當你按下按鈕時應該觸發 - 但它給了涵蓋這些結果。 –

回答

0

我看到兩個解決方案,這取決於任務需要很長時間的地方。

如果通過第一個活動執行長任務,按下按鈕時創建進度對話框,將onShowListener設置爲他的對話框,在onShow回調中啓動異步任務。任務完成後關閉進度對話框並開始下一個活動。

如果長期的任務被下一個活動執行只設置一個簡單的佈局在活動onCreate和克雷婭察進度對話框,設置onShowListener和昂秀啓動AsyncTtask,當它完成加載UI的休息和解僱對話框。

相關問題