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