Android网络加载时显示进度条

http://android.tgbus.com/Android/tutorial/201104/348906.shtml


在联网获取数据时,用一个进度条提示用户正在加载数据,以下讲一下我是如何实现这种效果的。
  
  由于Android的界面更新只能通过自己的UI线程进行操作,所以我们需要用到Handler在进行更新界面的操作。
  
  1、声明变量
    private Handler handler = new Handler();
    private ProgressDialog progressDialog = null;

  2、在开始进行网络连接时显示进度条对话框
  progressDialog = ProgressDialog.show(MyActivity.this, "请稍等...", "获取数据中...", true);

  3、在handler.post中进行界面更新
  public void setListAdapter(){
  handler.post(new Runnable() {
  public void run() {
   //将获取到的数据更新到列表中
   MyListView.setAdapter(saImageItems);
    }
   }
   });

4、开个新的线程进行网络连接获取数据
    new Thread(new Runnable(){
  

    @Override
    public void run() {
    // TODO Auto-generated method stub
    //向服务器请求数据
    mapList=MyAPI.getAllDatas();
    setListAdapter(mapList);
    //更新完列表数据,则关闭对话框
    progressDialog.dismiss();
    }}).start();

整个过程就这样完成了,下面是效果图:

  还有另外一种进度条的提示,是在对话框的标题上有圆形进度条进行提示。
  
  1、不能将Activity布局设计为无标题;
  并在setContentView()之前设置一下标题布局形式:
  requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);

  2、在连接网络前,设置进度条为可视状态
   setProgressBarIndeterminateVisibility(true);

  3、开一个新的线程向服务器请求数据,获取数据后,将进度条设为不可视状态
         new Thread(new Runnable(){
         @Override
        public void run() {
          // TODO Auto-generated method stub
          try {
           todosomething();
          setProgressBarIndeterminateVisibility(false);
          } catch (Exception e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
         }
        }}).start();



http://limingcai.iteye.com/blog/1149385


package xiaohang.zhimeng; 

import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.view.View; 
import android.view.Window; 
import android.widget.Button; 
import android.widget.ProgressBar; 

public class Activity01 extends Activity { 

//声明ProgressBar对象 
private ProgressBar xh_ProgressBar; 
private ProgressBar xh_ProgressBar2; 
private Button xh_Button; 
protected static final int GUI_STOP_NOTIFIER = 0x108; 
protected static final int GUI_THREADING_NOTIFIER = 0x109; 
public int intCounter = 0; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
//设置窗口模式,因为需要显示进度条在标题栏 
// requestWindowFeature(Window.FEATURE_PROGRESS); 
// setProgressBarVisibility(true); 
setContentView(R.layout.main); 

//得到ProgressBar 
xh_ProgressBar = (ProgressBar) findViewById(R.id.ProgressBar01); 
xh_ProgressBar2 = (ProgressBar) findViewById(R.id.ProgressBar02); 
xh_Button = (Button) findViewById(R.id.Button01); 

//设置进度条 不为 不确定模式 
xh_ProgressBar.setIndeterminate(false); 
xh_ProgressBar2.setIndeterminate(false); 

//当按钮按下时开始执行 
xh_Button.setOnClickListener(new Button.OnClickListener() { 
@Override 
public void onClick(View v) { 
//设置ProgressBar为可见状态 
xh_ProgressBar.setVisibility(View.VISIBLE); 
xh_ProgressBar2.setVisibility(View.VISIBLE); 
//设置ProgressBar的最大值 
xh_ProgressBar.setMax(100); 
//设置ProgressBar当前值 
xh_ProgressBar.setProgress(0); 
xh_ProgressBar2.setProgress(0); 

//通过线程来改变ProgressBar的值 
new Thread(new Runnable() { 
@Override 
public void run() { 
for (int i = 0; i < 10; i++) { 
try { 
//设置进度值 
intCounter = (i + 1) * 20; 
//睡眠1000毫秒 
Thread.sleep(1000); 

if (i == 4) { 
Message m = new Message(); 

m.what = Activity01.GUI_STOP_NOTIFIER; 
Activity01.this.myMessageHandler 
.sendMessage(m); 
break; 
} else { 
Message m = new Message(); 
m.what = Activity01.GUI_THREADING_NOTIFIER; 
Activity01.this.myMessageHandler 
.sendMessage(m); 


} catch (Exception e) { 
e.printStackTrace(); 




}).start(); 


}); 


Handler myMessageHandler = new Handler() { 
@Override 
public void handleMessage(Message msg) { 
switch (msg.what) { 
//ProgressBar已经是最大值 
case Activity01.GUI_STOP_NOTIFIER: 
xh_ProgressBar.setVisibility(View.GONE); 
xh_ProgressBar2.setVisibility(View.GONE); 
Thread.currentThread().interrupted(); 
break; 
case Activity01.GUI_THREADING_NOTIFIER: 
if (!Thread.currentThread().isInterrupted()) { 
//改变ProgressBar的当前值 
xh_ProgressBar.setProgress(intCounter); 
xh_ProgressBar2.setProgress(intCounter); 

//设置标题栏中前景的一个进度条进度值 
setProgress(intCounter * 100); 

break; 

super.handleMessage(msg); 

}; 


XML 文件 
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello" 
    /> 

<ProgressBar 
android:id="@+id/ProgressBar01" 
style="?android:attr/progressBarStyleHorizontal" 
android:layout_width="200dp" 
android:layout_height="wrap_content" 
android:visibility="gone" 
/> 

<ProgressBar 
android:id="@+id/ProgressBar02" 
style="?android:attr/progressBarStyleLarge" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:max="100" 
android:progress="50" 
android:secondaryProgress="70" 
android:visibility="gone" 
/> 

<Button 
android:id="@+id/Button01" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="开始"/> 

</LinearLayout> 





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值