Второе намерение в onClick выполняется перед первым - PullRequest
0 голосов
/ 25 июня 2018

Я пишу приложение для 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 без выбора картинки из галереи.Интересно, как это исправить.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Вы должны переопределить 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);
} 
0 голосов
/ 25 июня 2018

Вы звоните 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();
    }
}
...