OnActivityResult не вызывается - PullRequest
       13

OnActivityResult не вызывается

0 голосов
/ 27 октября 2018

В упражнении А я хочу открыть диалоговое окно (CustomDialog).Внутри CustomDialog есть кнопка для открытия камеры.Но onActivityResult не вызывают после того, как я выбираю изображение из галереи.Нет toast отображается.

Активность A

private void openDialog() {
        CustomDialog alert = new CustomDialog();
        alert.showDialog(this);
    }

CustomDialog

public class CustomDialog extends Activity{

    Activity activity;
    ImageView imageView;

    public void showDialog(Activity activity) {
        this.activity = activity;
        final Dialog dialog = new Dialog(activity);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setCancelable(false);
        dialog.setContentView(R.layout.custom_dialog);
        dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
        dialog.setCanceledOnTouchOutside(true);

        imageView = (ImageView) dialog.findViewById(R.id.logoApp);

        Button galleryBtn = (Button) dialog.findViewById(R.id.galleryBtn);

        galleryBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                galleryIntent();
            }
        });
        dialog.show();
    }

    private void galleryIntent() {
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);//
        activity.startActivityForResult(Intent.createChooser(intent, "Select File"), 1);
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Toast.makeText(activity,"sdddddsss",Toast.LENGTH_LONG).show();
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == Activity.RESULT_OK) {
            if (requestCode == 1) {
                onSelectFromGalleryResult(data);
            }else{
              // ...
            }
        }
    }

    @SuppressWarnings("deprecation")
    private void onSelectFromGalleryResult(Intent data) {
        Bitmap bm=null;
        if (data != null) {
            try {
                bm = MediaStore.Images.Media.getBitmap(getApplicationContext().getContentResolver(), data.getData());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        imageView.setImageBitmap(bm);
    }
}

Я подписан на этоhttp://www.theappguruz.com/blog/android-take-photo-camera-gallery-code-sample

Ответы [ 3 ]

0 голосов
/ 27 октября 2018

причина, по которой onActivityResult () не вызывается, потому что onActivityResult () вызывается, когда вы запускаете действие для результата, то есть startActivityForResult (...), а затем, когда запущенное действие возвращается или заканчивается, вызывается onActivityResult ()

0 голосов
/ 27 октября 2018

Когда вы показываете диалог в Деятельности A, вы устанавливаете ссылку на Деятельность A в качестве параметра: alert.showDialog(this); Затем внутри CustomDialog вы сохраняете эту ссылку как переменную операции:

public void showDialog(Activity activity) { this.activity = activity; ...}

Это означает, что this.activity является экземпляром Действия A. Позже в вашей galleryIntent () вы запускаете действие для результата, подобного следующему:

private void galleryIntent() { ... activity.startActivityForResult(Intent.createChooser(intent, "Select File"), 1); }

Это означает, что будет вызываться onActivityResult.в действии А, а не в пользовательском диалоговом окне, поскольку вы использовали переменную activity.

У вас есть 2 варианта исправления:

1) заменить activity.startActivityForResult на CustomDialog.this.startActivityForResult

2) переместите ваш код onActivityResult из CustomDialog в действие A

0 голосов
/ 27 октября 2018

Вы звоните: startActivityForResult на activity ссылке, которая не совпадает с CustomDialog, в которой вы ожидаете вызова onActivityResult.Я не помню, чтобы когда-либо звонил startActivityForResult в случае активности, которая не является приоритетной - я не уверен, сработает ли она.Я предлагаю вам изменить: activity.startActivityForResult на startActivityForResult

кстати.в вашем onActivityResult вы дважды звонили super.onActivityResult(requestCode, resultCode, data);.Это не правильно.

...