2012-06-01 92 views
0

我在main.xml中有一個按鈕,它將鏈接到另一個包含來自服務器的信息的xml。我包含進度條以避免系統加載信息時出現空白屏幕。我已經完成了下面的代碼,但它仍然不是我想要的東西。下面的代碼將「等待」1000毫秒,然後纔會執行下一個代碼。我如何修改它以便加載「等待時間」取決於互聯網速度,如果互聯網連接速度慢,那麼進度條屏幕將顯示更長時間。加載時顯示進度條

package com.android.myApps; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.os.Handler; 
import android.view.View; 
import android.widget.TextView; 

public class MainScr extends Activity { 

    private final int WAIT_TIME = 1000; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    {  
     super.onCreate(savedInstanceState);  
     setContentView(R.layout.MainScr);  
    } 

    public void onClickCategory(View view) 
    { 
     findViewById(R.id.mainSpinner1).setVisibility(View.VISIBLE); 
     new Handler().postDelayed(new Runnable(){ 
      @Override 
       public void run() {       
         Intent mainIntent = new Intent(MainScr.this, Category.class); 
         MainScr.this.startActivity(mainIntent); 
         MainScr.this.finish(); 
         } 
      }, WAIT_TIME); 
    } 
} 
+0

我以爲我的【答案】(http://stackoverflow.com/a/9078502/996493)將幫助你:) – Lucifer

+0

你嘗試Asyntask? –

回答

11

,你在這裏做的是你正在傾倒的具體時間爲你的代碼 你永遠不知道需要多少才能到達響應的錯誤。 您應該按照以下方法在屏幕上

步驟1顯示進度對話框

第二步讓下載走好自己的時間。但它應該在新的線程來完成

第3步下載完成後它會提出任務完成的消息,現在刪除該進程對話框並繼續。

我粘貼示例代碼here.Hope它會幫助你。

package com.android.myApps; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 

public class MainScr extends Activity 
{ 
    private Handler handler; 
    private ProgressDialog progress; 
    private Context context; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     context = AncActivity.this; 
     progress = new ProgressDialog(this); 
     progress.setTitle("Please Wait!!"); 
     progress.setMessage("Wait!!"); 
     progress.setCancelable(false); 
     progress.setProgressStyle(ProgressDialog.STYLE_SPINNER); 

     handler = new Handler() 
     { 

      @Override 
      public void handleMessage(Message msg) 
      { 
       progress.dismiss(); 
       Intent mainIntent = new Intent(context, Category.class); 
       startActivity(mainIntent); 
       super.handleMessage(msg); 
      } 

     }; 
     progress.show(); 
     new Thread() 
     { 
      public void run() 
      { 
       // Write Your Downloading logic here 
       // at the end write this. 
       handler.sendEmptyMessage(0); 
      } 

     }.start(); 

    } 

} 
+0

感謝您的回答,一切都很好,但加載圖標不旋轉:P – melvintcs

+1

嘗試在這裏使用AsynTask ..它會在後臺執行您的任務 – Nepster

+0

@Vipul Shah我需要這樣的解決方案,類別'已被棄用,請您更新今天使用的答案。我嘗試用'Logger'替換'Category',但沒有運氣。請幫忙。 – Emzor

2

你試過Asyntask嗎?你在做的過程將在UI中更新。

public final class HttpTask 
     extends 
     AsyncTask<String/* Param */, Boolean /* Progress */, String /* Result */> { 

    private HttpClient mHc = new DefaultHttpClient(); 

    @Override 
    protected String doInBackground(String... params) { 
     publishProgress(true); 
     // Do the usual httpclient thing to get the result 
     return result; 
    } 

    @Override 
    protected void onProgressUpdate(Boolean... progress) { 
     // line below coupled with 
     // getWindow().requestFeature(Window.FEATURE_INDETERMINATE_PROGRESS) 
     // before setContentView 
     // will show the wait animation on the top-right corner 
     MyActivity.this.setProgressBarIndeterminateVisibility(progress[0]); 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     publishProgress(false); 
     // Do something with result in your activity 
    } 
}