如何在我的项目中制作进度条(加载动画)?

时间:2012-06-11 07:05:18

标签: android sms progress-bar loading handle

我按照以下方式制作项目:Fetch Messages from Inbox

部分代码:

while  (cursor.moveToNext()) 
{
    String address = cursor.getString(1);
    String body = cursor.getString(3);

    // Loading too long
    System.out.println("======> Mobile number => "+address);
    System.out.println("=====> SMS Text => "+body);
    sms.add("Address=> "+address+"\n SMS => "+body);   
}
return sms;

但是,消息太多,需要很长时间才能显示出来。在loding我想要显示动画(progressbar)

谢谢你...

4 个答案:

答案 0 :(得分:2)

通常你会在Android上使用AsyncTask这样的东西..

简介: 默认情况下,您使用线程,服务等编写的所有代码都将在UI thread中执行..这意味着如果您执行那里有一些昂贵的工作,用户界面将被阻止(没有响应)。好的做法是将这么昂贵的任务转移到单独的线程,否则你的app会显示ANR对话框并被关闭。

如何: 针对您的案例的最佳方法之一是使用AsyncTask ..基本上在onPreExecute()中显示进度对话框或“正在进行的长期任务“动画。在doInBackground(Params... params)中,您放置了昂贵的操作代码。如果您需要更新进度条,请从onProgressUpdate(Progress... values)进行更新。当昂贵的任务完成时,它将为onPostExecute(Result result)方法提供结果。从这一个,您可以再次更新UI并关闭以前显示的进度对话框。

希望它有所帮助。干杯..;)

答案 1 :(得分:1)

使用Asyntask,将该代码放入doInBackground,在processbar中启动onPreExecute(),在onPostExecute()中放弃

答案 2 :(得分:0)

在您的项目中实施Runnable。运行此代码

while  (cursor.moveToNext()) 
{
String address = cursor.getString(1);
String body = cursor.getString(3);

// Loading too long
System.out.println("======> Mobile number => "+address);
System.out.println("=====> SMS Text => "+body);
sms.add("Address=> "+address+"\n SMS => "+body);   
}
//return sms;// Make a global variable which can hold values here...
handler.sendEmptyMessage(0);

in

run()

方法。现在开始这样的线程:

Thread fetchSmsThread = new Thread(this);
progressDialog = ProgressDialog.show(context,title,message);
fetchSmsThread.start();

处理程序代码:

 Handler handler = new Handler()
 {

  //////Catch Message Here.. and Dismiss dialog...
  ///Note You have to declare progress dialog as global so that you can access it here...

 }

有关runnable的进一步帮助,请按照以下步骤操作:

How to run a Runnable thread in Android?

如果您不想使用Runnable,请使用Android AsynClass,请按照:

AsyncTask Android example

答案 3 :(得分:0)

在main.xml中添加一个带有id的进度条(下例中的yourProgressBarId):

@Override  
public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.main);  

    final ListView lViewSMS = (ListView) findViewById(R.id.listViewSMS);  

    final ProgressBar progressBar = (ProgressBar)findViewById(R.id.yourProgressBarId);
    progressBar.setVisibility(View.VISIBLE);
    new Thread(){
        public void run() {

                ArrayList sms =fetchInbox();
                if(sms!=null) 
                lViewSMS.post(new Runnable() {

                    @Override
                    public void run() {
                         ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, sms);  
                         lViewSMS.setAdapter(adapter);  
                         progressBar.setVisibilty(View.GONE);
                }
          });
    }   
}.start();

}