Второе намерение в onClick выполняется перед первым

Я пишу приложение для Android и столкнулся с проблемой: Мне нужно выбрать изображение из галереи, а затем отправить его в другое действие (и перейти к этому действию). Когда у меня есть только Intent, который выбирает изображение из галереи, он работает нормально, открывает галерею, позволяет вам выбрать изображение, а затем ничего не происходит, хорошо. Но когда я добавляю другое намерение, которое переходит к другому действию, оно игнорирует первое намерение.

ImageButton gallery;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        gallery = (ImageButton) findViewById(R.id.imageButton2);
        gallery.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setType("image/*");
                intent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);

                goToConfirmActivity();
            }
        });
    }
    public void goToConfirmActivity(){
        Intent goToConfirmIntent = new Intent(MainActivity.this, confirmActivity.class);
        goToConfirmIntent.putExtra("image", uri);
        startActivity(goToConfirmIntent);
    }

Он просто переходит прямо к confirmActivity, не выбирая картинку из галереи. Интересно, как это исправить. Заранее спасибо.

Переопределите onActivityResult, а затем вызовите goToConfirmActivity () после того, как вы получите uri изображения из результата

JRowan 24.06.2018 23:55
0
1
27
2

Ответы 2

Вы звоните goToConfirmActivity(); сразу после запуска Intent.ACTION_GET_CONTENT. Поскольку вызов для получения контента является асинхронным, управление продолжит выполнение следующей строки. В результате будет выполнен goToConfirmActivity(); и запущено следующее намерение. Чтобы избежать этого переопределения onActivityResult, выполните следующие действия.

@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == PICK_IMAGE_REQUEST){
        //You can get URI from intent data
        goToConfirmActivity();
    }
}

Вы должны переопределить onActivityResult, так как тогда вы можете проверить, действительно ли пользователь выбрал изображение из галереи или просто нажал кнопку возврата после открытия галереи.

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK){
        Uri uri= data.getData();
        goToConfirmActivity(uri);
    } else {
        //Some error has occurred.
    }
}

И ваш метод goToConfirmActivity должен быть таким:

void goToConfirmActivity(Uri uri){
    Intent goToConfirmIntent = new Intent(MainActivity.this, confirmActivity.class);
    goToConfirmIntent.putExtra("image", uri);
    startActivity(goToConfirmIntent);
} 

Другие вопросы по теме