Android ProgressDialog 实现圆形进度对话框 和 水平进度对话框

图1:
在这里插入图片描述
图2:
在这里插入图片描述
图3:
在这里插入图片描述
activity_main.xml

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="圆形进度条对话框"
        android:onClick="showPD"
        android:layout_gravity="center"
        android:layout_marginTop="80dp" />

MainActivity.java:

public class MainActivity extends AppCompatActivity {

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

    public void showPD(View v){

        final ProgressDialog dialog = ProgressDialog.show(this,"数据加载","数据加载中...");

        //  模拟做一个长时间的工作
        //  长时间的工作不能在主线程做,得启动 子线程 完成
        new Thread(){
            @Override
            public void run() {
                for (int i=0;i<20;i++){
                    //  休息一会
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                //  移除 dialog
                dialog.dismiss();   //虽然是在子线程中执行的,但是内部使用Handler实现主线程更新UI

                //  不能再子线程直接更新UI,   Toast

                //  将 子线程 切换 主线程 去更新UI
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(MainActivity.this,"加载完成了!!!",Toast.LENGTH_LONG).show();
                    }
                });

            }
        }.start();

        //  注意Toast不能放在这个位置进行提示,因为多线程的意思就是在不断往下执行代码的过程中,也不断的在做线程中的逻辑问题,那么如果这样么写
        //  就会造成 Toast 直接提示了,应该要放在子线程执行完后,再去执行
//            Toast.makeText(MainActivity.this,"加载完成了!!!",Toast.LENGTH_LONG).show();

    }

}

总结:

1.	子线程不能更新UI界面

2.	启动子线程代码:
	new Thread(){
            @Override
            public void run() {
            
            }
          
        }.start();
        
3.	在子线程中切换回主线程代码:
 	runOnUiThread(new Runnable() {
                    @Override
                    public void run() {

                    }
       });

4.	要注意线程的执行和方法的顺序向下执行代码块是同时进行的!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王睿丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值