我在线程中使用ProgressDialog
。在onButtonClick
线程已启动,但当我触摸屏幕上的任意位置时,ProgressDialog
已关闭。
我该如何防止这种情况?
private void ButtonClick(View view) {
btn1 = (Button) view.findViewById(R.id.btn1);
btn1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
GetStudentData();
}
});
}
private synchronized void GetStudentData() {
try {
// Thread to display loader
new Thread() {
@Override
public void run() {
Looper.prepare();
dialog = Msg.ShowProgressDialogBox(
getActivity(),
dialog,
"Please wait while we fetch the student data...");
Looper.loop();
}
}.start();
new Thread() {
@Override
public void run() {
String studentData="Kailas";
}
}
} catch(Exception ex {
}
}
更新
当我触摸屏幕时,ProgressDialog
消失但获取所有数据。
答案 0 :(得分:48)
将此添加到对话框中:
yourDialog.setCanceledOnTouchOutside(false);
通过这种方式,您可以触摸屏幕并且不会取消对话框。
修改强>
如果您使用DialogFragment
,则必须在调用 show(FragmentManager mng,String tag)之前使用以下代码段:
更多信息here。
dialogFragment.setCancelable(false);
编辑2
请注意ProgressDialog
,因为 Android Oreo(v8.0)现在已弃用。
答案 1 :(得分:5)
private synchronized void GetStudentData() {
try {
// Thread to display loader
new Thread() {
@Override
public void run() {
Looper.prepare();
dialog = Msg.ShowProgressDialogBox(getActivity(),
dialog,
"Please wait while we fetch the student data...");
dialog.setCanceledOnTouchOutside(getRetainInstance());
Looper.loop();
}
}.start();
new Thread() {
@Override
public void run() {
String studentData="Kailas";
}
}
}
我使用过这行 dialog.setCanceledOnTouchOutside(getRetainInstance()); ,它在我的 android设备操作系统(4.0.1)中运行良好,也在OS(2.6.3)上测试过强>
答案 2 :(得分:3)
当您进行某些重要的数据下载过程时,您可以使用以下代码进行无法取消的进度对话框:
mDialog.setCancelable(false);
mDialog.setCanceledOnTouchOutside(false);
mDialog.setOnCancelListener(new Dialog.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
// DO SOME STUFF HERE
}
}
如果您在项目中使用,也可以在操作栏中找到进度条。
希望它会对你有所帮助。
答案 3 :(得分:2)
制作一个这样的课程:
public class Progresss {
static ProgressDialog dialog;
public static void start(Context context) {
dialog = new ProgressDialog(context);
try {
dialog.show();
} catch (BadTokenException e) {
}
dialog.setCancelable(false);
dialog.setContentView(R.layout.progressdialog123);
// dialog.setMessage(Message);
// return dialog;
}
public static void stop() {
if(dialog!=null)
dialog.dismiss();
}
}
这是布局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@android:color/transparent" >
<ProgressBar
android:id="@+id/progressBar1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true" />
</RelativeLayout>
用法是这样的:
Progresss.start(context);
Progresss.stop();