3

ユーザーが [登録] ボタンをクリックすると、カスタム ダイアログ ボックスが表示され、ユーザーはメニューに移動します。しかし、私の場合、Costum ダイアログは 1 秒間だけ表示され、ユーザーは次のレイアウトに進みます。

カスタム ダイアログの時間を設定する方法を教えてください。

ここに私のコード:

    buttonRegister.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {

            new Thread(new Runnable() {
                @Override
                public void run() {

                    final String name = inputName.getText().toString();
                    final String mail = inputEmail.getText().toString();
                    final String password = inputPassword.getText()
                            .toString();

                    PatientFunctions patientFunction = new PatientFunctions();

                    json = patientFunction.registerPatient(name, mail,
                            password);

                    try {
                        if (json.getString(KEY_SUCCESS) != null) {

                            String res = json.getString(KEY_SUCCESS);
                            if (Integer.parseInt(res) == 1) {
                                Intent main = new Intent(
                                        getApplicationContext(), Main.class);
                                main.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                                startActivity(main);
                                finish();
                            }
                        }
                    } catch (NumberFormatException e) {
                        e.printStackTrace();
                    }

                    catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }).start();

            CustomizeDialog customizeDialog = new CustomizeDialog(RegisterPatient.this);
            customizeDialog.show(); 

                            Handler handler = null;
            handler = new Handler(); 
            handler.postDelayed(new Runnable(){ 
                 public void run(){
                     customizeDialog.cancel();
                     customizeDialog.dismiss();
                 }
            }, 3000);

        }
    });
4

2 に答える 2

0

AlarmManagerTimer 、 TimerTaskなど、多くの優れたオプションがあります

次のようにハンドラーを使用することもできます。

Handler handler = null;
handler = new Handler(); 
handler.postDelayed(new Runnable(){ 
     public void run(){
         customdialog.cancel();
         customdialog.dismiss();
     }
}, 500);
于 2013-10-04T17:02:11.873 に答える
0

この種のプロセスを実行する最善の方法は、AsyncTaskクラスを使用することです。

onPreExecutedoInBackgroundonPostExecuteをオーバーライドします

公式ガイドを見る

バックグラウンド スレッドのプールで実行される doInBackground() コールバック メソッドを実装します。UI を更新するには、doInBackground() からの結果を配信し、UI スレッドで実行される onPostExecute() を実装して、UI を安全に更新できるようにする必要があります。その後、UI スレッドから execute() を呼び出してタスクを実行できます。

private class Registration extends AsyncTask<String, Void, String>{

    CustomizeDialog customizeDialog;
    @Override
    protected void onPreExecute() {
        // show ur dialog
        customizeDialog = new CustomizeDialog(RegisterPatient.this);
        customizeDialog.show(); 
    }
    @Override
    protected String doInBackground(String... params) {

        final String name = params[0];
        final String email = params[1];
        final String password = params[2];

        PatientFunctions patientFunction = new PatientFunctions();

        json = patientFunction.registerPatient(name, mail,
                password);

        try {
            if (json.getString(KEY_SUCCESS) != null) {

                String res = json.getString(KEY_SUCCESS);
                return res;
            }
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }

        catch (JSONException e) {
            e.printStackTrace();
        }
    }
    @Override
    protected void onPostExecute(String result) {
        if (Integer.parseInt(res) == 1) {
            if(customizeDialog != null)
                customizeDialog.dismiss();

            Intent main = new Intent(
                    getApplicationContext(), Main.class);
            main.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            //move to the next activity
            startActivity(main);
            finish();
        }
    }

}

編集

そして、あなたが望むようにそれを実行します

buttonRegister.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                final String name = inputName.getText().toString();
                final String mail = inputEmail.getText().toString();
                final String password = inputPassword.getText()
                        .toString();
                new Registration().execute(name,mail,password);
            }
     });
于 2013-10-04T18:00:15.420 に答える