スレッドで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
が消えますが、すべてのデータを取得します。
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デバイスOSで正常に動作しました(4.0.1)もOSでテスト済み(2.6.3)
これをダイアログに追加します。
yourDialog.setCanceledOnTouchOutside(false);
このようにして、画面をタッチすることができ、ダイアログはキャンセルされません。
[〜#〜]編集[〜#〜]
DialogFragment
を使用している場合は、show(FragmentManager mng、String tag)を呼び出す前に、次のコードスニペットを使用する必要があります。
詳細 ここ 。
dialogFragment.setCancelable(false);
EDIT 2
ProgressDialog
には注意してください。Android Oreo(v8.0)では廃止されているためです。
特定の重要なデータのダウンロードプロセスを行っている場合、以下のコードを使用して進行ダイアログをキャンセルできないようにすることができます。
mDialog.setCancelable(false);
mDialog.setCanceledOnTouchOutside(false);
mDialog.setOnCancelListener(new Dialog.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
// DO SOME STUFF HERE
}
}
また、プロジェクトで使用している場合は、アクションバーの進行状況バーに移動できます。
それがあなたを助けることを願っています。
次のようなクラスを作成します。
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();