#java #android #android-studio
Вопрос:
Я пытаюсь отобразить сетку изображений, которые пользователь может сделать с помощью приложения, которое я создаю.
Все, похоже, настроено правильно, я сохраняю соответствующие URI изображений в массиве URI и передаю их в конструктор моего пользовательского сетевого адаптера.
Оттуда, в моем классе адаптера сетки, я устанавливаю изображение imageview в макете image_grid_view в URI, который был получен из MainActivity и добавлен в мой ArrayList URI.
Мой класс адаптеров сетки:
public class GridAdapter extends BaseAdapter { ArrayListlt;Urigt; imagesArrList; LayoutInflater inflater; Context mContext; public GridAdapter(Context _context, ArrayListlt;Urigt; _images) { this.mContext = _context; this.imagesArrList = _images; inflater = LayoutInflater.from(this.mContext); } @Override public int getCount() { return imagesArrList.size(); } @Override public Object getItem(int position) { return imagesArrList.get(position); } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { NewViewHolder mViewHolder; Uri image = imagesArrList.get(position); if (convertView == null) { convertView = inflater.inflate(R.layout.image_grid_view, parent, false); mViewHolder = new NewViewHolder(convertView); convertView.setTag(mViewHolder); } else { mViewHolder = (NewViewHolder) convertView.getTag(); } if (image != null) { mViewHolder.ivUserImage.setImageURI(image); } return convertView; } private static class NewViewHolder { ImageView ivUserImage; public NewViewHolder(View item) { ivUserImage = item.findViewById(R.id.userImage); } } }
Основная Деятельность:
@Override public void onClick(View view) { int id = view.getId(); if (id == R.id.fab) { IMAGE_FILE = UUID.randomUUID().toString() ".jpg"; File imageFileReference = createImageFile(IMAGE_FILE); Uri imageUri = FileProvider.getUriForFile(this, "--REDACTED FOR PRIVACY---", imageFileReference); Log.i("FILEPROVIDERLOG", "File Path: " imageFileReference.getAbsolutePath()); Log.i("FILEPROVIDERLOG", "File URI: " imageUri); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); ActivityCompat.startActivityForResult(this, intent, 0, null); } } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); File imageFileReference = getImageFileReference(IMAGE_FILE); Log.i("FILEPROVIDERLOG", "File Path: " imageFileReference.getAbsolutePath()); BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 2; Bitmap bitmap = BitmapFactory.decodeFile(imageFileReference.getAbsolutePath()); iv.setImageBitmap(bitmap); Uri imageURI = FileProvider.getUriForFile(this, "--REDACTED FOR PRIVACY---", imageFileReference); Log.i("FILEPROVIDERLOG", "File URI: " imageURI); iv.setImageURI(null); iv.setImageURI(imageURI); imagesArrList.add(imageURI); gridView.setAdapter(new GridAdapter(this, imagesArrList)); } private File createImageFile(String _fileName) { File imageFile = getImageFileReference(_fileName); try{ imageFile.createNewFile(); } catch (IOException e) { e.printStackTrace(); return null; } return imageFile; } private File getImageFileReference(String _fileName) { File protectedStorage = getExternalFilesDir(IMAGE_FOLDER); return new File(protectedStorage, _fileName); } }
Любые идеи будут высоко оценены. Заранее спасибо, что нашли время прочитать и/или ответить на мой вопрос!
Комментарии:
1. Я вижу, вы отобразили выбранное изображение в iv , верно? Появится ли там изображение, также добавьте журнал, чтобы увидеть размер вашей сетки
2. @MouaadAbdelghafourAITALI Изображение там не отображается. Я предполагаю, что вы имеете в виду в моем макете с левой стороны? Я добавлю журнал, чтобы проверить размер. Спасибо вам за совет!
3. сначала выберите изображение и отобразите его
ImageView
, если оно не отображается, затем убедитесь, что разрешение на хранение предоставлено4. Итак, я загрузил изображение-заполнитель, и, похоже, оно загружается просто отлично. Используя изображение из моей папки для рисования. Кроме того, включены разрешения uri.