Почему Intent запускается до AlertDialog.Builder, даже если он закодирован наоборот - PullRequest
1 голос
/ 27 мая 2011

С помощью следующего кода Intent запускается при вызове newPicture, а затем отображается диалог.Что это значит, и как я могу изменить порядок?

public void newPicture(View v) {
    SharedPreferences settings = getPreferences(MODE_PRIVATE);
    boolean geoProtipAlreadyShown = settings.getBoolean("geoProtipAlreadyShown", false);

    if (!geoProtipAlreadyShown) {
        showGeoProtip();

        // and set the option in SharedPreferences
        SharedPreferences.Editor editor = settings.edit();
        editor.putBoolean("geoProtipAlreadyShown", true);
        editor.commit();
    }

    // start the image capture activity
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);        
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(PATH, "tmpfile.jpg")));
    startActivityForResult(intent, IMAGE_CAPTURE);  

}

private void showGeoProtip() {
    String geoProtip = this.getResources().getString(R.string.protip);
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage(geoProtip).setCancelable(true).setPositiveButton("OK", null);
    AlertDialog alert = builder.create();
    alert.show();
}

Ответы [ 4 ]

4 голосов
/ 27 мая 2011

Переместите начальное действие захвата изображения в новый метод и поместите его в диалоговое окно OnClickListener:

builder.setMessage(geoProtip).setCancelable(true).setPositiveButton("OK",
    new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            captureImage();
        }
    });


private void captureImage(){
        // start the image capture activity
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);        
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(PATH, "tmpfile.jpg")));
        startActivityForResult(intent, IMAGE_CAPTURE);        
}

И измените if-else:

if (!geoProtipAlreadyShown) {
    showGeoProtip();
    ....
}else{
    captureImage();
}
0 голосов
/ 27 мая 2011

Я думаю, это будет полезно

Dialog dlg = new AlertDialog.Builder(context)
    .setTitle("TITLE")
    .setMessage("MSG")
    .setPositiveButton("OK", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            //Write the intent here.
        }
    })
    .create();
    dlg.show();
0 голосов
/ 27 мая 2011

Это классическое замечание для программистов на Android.По сути, показ предупреждения не останавливает выполнение кода, поэтому вы должны запустить намерение внутри onclicklistener.

0 голосов
/ 27 мая 2011

Переместите ваше намерение, посылая на щелчок по одной из кнопок диалогового окна.

...