android加载圈(spinner)两个活动之间

时间:2016-01-29 07:32:28

标签: android android-spinner

我有一个主要活动,它有简单的按钮和与之关联的监听器。每个按钮都会打开一个新活动(意图)。但是,在打开活动时,加载会导致UI冻结需要一些时间。我想通过简单地在它们之间添加一个加载圆(微调器)来避免这种情况。我搜索了很多帖子,但仍然找不到任何内容。

通过加载圈我的意思是

image

4 个答案:

答案 0 :(得分:15)

那是Progress Bar。您可以通过编程方式或使用XML格式的小部件来创建它。

以XML格式实现:

description

要在Java中实现(使用评论中提到的Progress Dialog,但您也可以使用code执行此操作):

<ProgressBar
    android:id="@+id/progress_loader"
    style="?android:attr/progressBarStyle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:visibility="visible" />

在进入下一个活动之前,您应该Progress Bar进度条。

 ProgressDialog nDialog;
 nDialog = new ProgressDialog(Login.this);
 nDialog.setMessage("Loading..");
 nDialog.setTitle("Get Data");
 nDialog.setIndeterminate(false);
 nDialog.setCancelable(true);
 nDialog.show();

答案 1 :(得分:1)

在第二个活动中使用以下代码

<ProgressBar
    android:id="@+id/progress_loader"
    style="?android:attr/progressBarStyle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:visibility="visible" />

初始化

后,可见性消失

答案 2 :(得分:1)

您无法通过添加加载小部件来避免UI冻结。您将必须找到阻塞主线程的代码并将其移至工作线程。查看Android documentation中的“线程帮助程序类”。在不显示您现有代码的情况下(因此我们知道要阻止的内容),我们无法就此进一步建议您。

第二,如果要在视图事务之间显示加载小部件,则可以重组应用程序以使用fragments。活动可用于在片段之间进行切换,还可以包含一个小部件,可以在更改片段之前将其显示为小部件,完成后便不可见。

答案 3 :(得分:0)

尝试这样做

ProgressDialog progressDoalog;

progressDoalog = new ProgressDialog(DetailsActivity.this);
        progressDoalog.setMax(100);
        progressDoalog.setMessage("Please wait...");
        progressDoalog.setTitle("My Application");
        progressDoalog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        progressDoalog.show();
        final Handler handle = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                progressDoalog.incrementProgressBy(1);
            }
        };
new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            while (progressDoalog.getProgress() <= progressDoalog
                                    .getMax()) {
                                Thread.sleep(30);
                                handle.sendMessage(handle.obtainMessage());
                                if (progressDoalog.getProgress() == progressDoalog
                                        .getMax()) {
                                    progressDoalog.dismiss();
                                }
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }).start();