Android开发之ProgressDialog的使用

ProgressDialog类似于ProgressBar类。

用于显示一个过程,通常用于耗时操作。


几个方法介绍:

1.setMax()

设置对话框中进度条的最大值。

2.setTile()

设置标题。

3.setProgressStyl()

设置对话框中进度条的样式。例如:环形和水平。

参数:

ProgressDialog.STYLE_SPINNER    环形精度条

ProgressDialog.STYLE_HORIZONTAL     水平样式的进度条

4.setMessage()

设置显示的内容。


演示实例:

用于模拟一个耗时的连接操作。

图:

   

MainActivity.java

public class MainActivity extends Activity {Button button, button2;ProgressDialog progressDialog;public final static String ABOUT_SERVER = "Connect";// 信息广播接收BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context c, Intent intent) {String str = intent.getStringExtra("DATA");if (str.equals("0")) {progressDialog.setMessage("开始连接");} else if (str.equals("1")) {progressDialog.setMessage("连接完毕");} else {progressDialog.dismiss();}}};@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 注册广播监听IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(ABOUT_SERVER);registerReceiver(broadcastReceiver, intentFilter);}public void click(View v) {progressDialog = new ProgressDialog(MainActivity.this);progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);progressDialog.setMessage("准备建立连接·············");progressDialog.show();Intent intent = new Intent(MainActivity.this, ServerActivity.class);startService(intent);}}
activity_main.xml

ServerActivity.java

public class ServerActivity extends Service {Handler handler = new Handler() {public void handleMessage(Message msg) {Intent intent = new Intent(MainActivity.ABOUT_SERVER);if (msg.what == 0) {intent.putExtra("DATA", "0");} else if (msg.what == 1) {intent.putExtra("DATA", "1");} else {intent.putExtra("DATA", "2");ServerActivity.this.stopSelf();}sendBroadcast(intent);};};@Overridepublic void onCreate() {super.onCreate();Thread thread = new Thread(new Runnable() {@Overridepublic void run() {// 要做的事try {for (int i = 0; i < 3; i++) {Thread.sleep(1000);Message message = new Message();message.what = i;handler.sendMessage(message);}} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}});thread.start();}@Overridepublic IBinder onBind(Intent arg0) {// TODO Auto-generated method stubreturn null;}}
AndroidManifest.xml



在做此实例时,遇到报错,一大串红字,最关键的一句话:

This message is already in use.

从网上查得:与handler发送Message相关,消息已经在消息队列了,而且正被使用,而如果往同一个队列发送相同的对象就会报错。 造成这个错误是因为:
final Message message = new Message();Thread thread = new Thread(new Runnable() {@Overridepublic void run() {// 要做的事try {for (int i = 0; i < 3; i++) {Thread.sleep(1000);message.what = i;handler.sendMessage(message);}} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}});thread.start();
使用了同一个Message。用的API 19(4.4)与4.4模拟器,不显示错误,只是卡住,用的API 19(4.4)与2.2模拟器就报错了。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部