как добавить изображение в один фрагмент и отобразить его в другом фрагменте / передать изображение через пакет в android - PullRequest
1 голос
/ 29 мая 2020

Я хочу выбрать изображение в одном фрагменте и отобразить его в другом фрагменте.
как я могу это сделать.
это мой код, но он не работает

button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent gallery = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);
            startActivityForResult(gallery, 100);
        }
    });


@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    Uri imageUri;
    if (resultCode == RESULT_OK && requestCode == 100){
        imageUri = data.getData();
        file1path = imageUri.getPath();
        TVfrontimg.setText(file1path);
    }
}

, и я отправляю его с помощью пакета

Bundle bundle = new Bundle();
bundle.putString("image1", file1path);

registerPartThreeFragment.setArguments(bundle);
transaction.replace(R.id.FLcontainer, registerPartThreeFragment);
transaction.addToBackStack(null);
transaction.commit();

в другом фрагменте

String imgPath = getArguments().getString("image1");
Bitmap bitmap = BitmapFactory.decodeFile(String.valueOf(new File(imgPath)));
imageview.setImageBitmap(bitmap);

но он не работает. помогите пожалуйста.


он дает мне эту ошибку

2020-05-30 00: 16: 20.808 8995-8995 / com.example.deliveryapp E / BitmapFactory: Невозможно декодировать поток: java .io.FileNotFoundException: /raw/storage/emulated/0/DCIM/Camera/IMG_20200319_173033.jpg (Нет такого файла или каталога)

Ответы [ 2 ]

0 голосов
/ 29 мая 2020
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);

Этот код, который вы хотите показать для изображения

Вы должны найти реальный путь

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

android получить реальный путь с помощью Uri.getPath ()

0 голосов
/ 29 мая 2020

Пожалуйста, используйте getDataString () вместо getData ()

if (resultCode == RESULT_OK && requestCode == 100){
        Uri imageUri = Uri.parse(data.getDataString());
        //imageUri = data.getData();
        file1path = imageUri.getPath();
        TVfrontimg.setText(file1path);
}

И при установке его в ImageView используйте ContentResolver и входной поток следующим образом:

ContentResolver cR = getApplication().getContentResolver();
        try {
            InputStream ip = cR.openInputStream(imageUri);
            Bitmap bmp = BitmapFactory.decodeStream(ip);
            imageView.setImageBitmap(bmp)
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

Вы должны сделать это, потому что вы получаете contentUri, который отличается от Uri файла.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...