Изменить изображение для элемента ListView с помощью ACTION_PICK в контекстном меню - как передать элемент в onActivityResult ()? - PullRequest
0 голосов
/ 24 апреля 2020

Итак, я получил контекстное меню:

AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
    switch(item.getItemId()){
        case R.id.change_image_menu:
            Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            intent.putExtra(BUTTON_ID, info.position);
            startActivityForResult(intent.createChooser(intent, "Select new image for button"), CHANGE_IMAGE_REQUEST_CODE);
    }

и соответствующий onActivityResult ();

 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    if (requestCode == CHANGE_IMAGE_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
        Uri uri = null;
        if (data != null) {
            uri = data.getData();
            Log.d(TAG, "onActivityResult: uri of picked file is: " + uri.toString());
            mButtonViewModel.updateImage(data.getIntExtra(BUTTON_ID,-1), uri.toString());
        }
    }
    super.onActivityResult(requestCode, resultCode, data);
}

Очевидно, что это не работает - намерение, которое я получаю, содержит только Uri выбранного файла. Таким образом, поиск ответов заставил меня сохранить позицию в общих настройках или в поле - есть ли более элегантное решение?

...