2012-06-01 89 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 
    } 
}