【问题标题】:android loading circle (spinner) between two activity两个活动之间的android加载圈(微调器)
【发布时间】:2016-01-29 07:32:28
【问题描述】:

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

我的意思是加载圈子

【问题讨论】:

  • 我有一个基本的按钮监听器,点击时带有 startActivity(intent)。生成的活动是一个简单的列表视图页面,它从 Web 服务 onCreate 获取数据。我的目标是在它们之间放置一个加载微调器。

标签: android android-spinner


【解决方案1】:

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

在 XML 中实现:

<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" />

在 Java 中实现(使用您在 cmets 中询问的 Progress Dialog,但您也可以使用 Progress Bar 执行此操作):

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

在进行下一个活动之前,您应该dismiss() 进度条。

  nDialog.dismiss();

【讨论】:

  • 你拿到进度条了吗? @anil.e
  • 你知道如何设置这个进度对话框的样式吗?
  • 抱歉,我有水平进度条的样式。所以请参考以下链接在其中添加样式@anil.e.
【解决方案2】:

您无法通过添加加载小部件来避免 UI 冻结。您必须找到阻塞主线程的代码并将其移至工作线程。查看Android documentation 中的“Helper classes for threading”。如果不显示您现有的代码(因此我们知道什么是阻塞的),我们无法就此提供进一步的建议。

其次,如果您想在视图事务之间显示加载小部件,您可以重组您的应用程序以使用fragments。 Activity 可用于在 Fragment 之间切换,它还可以包含在更改 Fragment 之前可见且完成后不可见的小部件。

【讨论】:

    【解决方案3】:

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

    <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" />
    

    完成初始化后让可见性消失

    【讨论】:

    • 但是,如果我必须显示从 Activity 1 到 Activity 2 的进度条,并在加载第二个 Activity 后将其关闭。
    【解决方案4】:

    尝试这样做

    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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-02
      • 1970-01-01
      • 2016-12-02
      • 1970-01-01
      • 1970-01-01
      • 2018-02-24
      • 2018-02-26
      • 2018-03-17
      相关资源
      最近更新 更多