Выбрать несколько изображений из галереи и показать в RecyclerView - PullRequest
0 голосов
/ 04 февраля 2020

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

public class HorizontalRecyclerView extends RecyclerView.Adapter<HorizontalRecyclerView.HorizontalViewHolder> {

    private ArrayList<Photos> photos;

    public HorizontalRecyclerView(ArrayList<Photos> photos) {
        this.photos = photos;
    }

    @NonNull
    @Override
    public HorizontalViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int i) {
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        View view = inflater.inflate(R.layout.row_image, parent, false);
        return new HorizontalViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull HorizontalViewHolder horizontalViewHolder, int position) {
        Photos imgs = photos.get(position);
        Picasso.get()
                .load(imgs.getUri())
                .into(horizontalViewHolder.mImageRecyclerView);
    }

    @Override
    public int getItemCount() {
        return photos.size();
    }

    public class HorizontalViewHolder extends RecyclerView.ViewHolder {
        ImageView mImageRecyclerView;

        public HorizontalViewHolder(View itemView) {
            super(itemView);
            mImageRecyclerView = itemView.findViewById(R.id.imgLoader);
        }
    }
}

Я также сделал модель для выбора изображений и Uri:

public class Photos {
    String name;
    Uri uri;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Uri getUri() {
        return uri;
    }

    public void setUri(Uri uri) {
        this.uri = uri;
    }
}

Я - моя деятельность, мне нужно позвонить в отдел утилизации просмотр, но не показывает мне ничего. Мне нужна помощь, как правильно. Мой код активности, только onActivityResult часть:

@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        try {
            // When an image is picked
            if (requestCode == PICK_IMAGE_MULTIPLE && resultCode == RESULT_OK && data != null) {
                // get the image from data
                String[] filePathColumn = { MediaStore.Images.Media.DATA };
                imagesEncodedList = new ArrayList<>();
                if (data.getData() != null) {
                    Uri mImageUri = data.getData();

                    // Get the cursor
                    Cursor cursor = getContentResolver().query(mImageUri, filePathColumn, null, null, null);
                    // Move to first row
                    assert cursor != null;
                    cursor.moveToFirst();

                    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                    imageEncoded = cursor.getString(columnIndex);
                    cursor.close();

                    /*Bitmap mBitmap;
                    BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
                    mBitmap = BitmapFactory.decodeFile(file.getAbsolutePath(), bitmapOptions);
                    file = savebitmap(mBitmap);*/

                    ArrayList<Uri> mArrayUri = new ArrayList<>();
                    mArrayUri.add(mImageUri);
                    horizontalRecyclerView = new HorizontalRecyclerView(photos);
                    imagesRecyclerView.setAdapter(horizontalRecyclerView);
                    horizontalRecyclerView.notifyDataSetChanged();
                } else {
                    if (data.getClipData() != null) {
                        ClipData mClipData = data.getClipData();
                        ArrayList<Uri> mArrayUri = new ArrayList<>();
                        for (int i = 0; i < mClipData.getItemCount(); i++) {
                            ClipData.Item item = mClipData.getItemAt(i);
                            Uri uri = item.getUri();
                            mArrayUri.add(uri);

                            // Get the cursor
                            Cursor cursor = getContentResolver().query(uri, filePathColumn, null, null, null);
                            // Move to first row
                            assert cursor != null;
                            cursor.moveToFirst();

                            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                            imageEncoded  = cursor.getString(columnIndex);
                            imagesEncodedList.add(imageEncoded);
                            cursor.close();

                            /*Bitmap mMultipleBitmap;
                            BitmapFactory.Options bo = new BitmapFactory.Options();
                            mMultipleBitmap = BitmapFactory.decodeFile(file.getAbsolutePath(), bo);
                            file = savebitmap(mMultipleBitmap);*/

                            horizontalRecyclerView = new HorizontalRecyclerView(photos);
                            imagesRecyclerView.setAdapter(horizontalRecyclerView);
                            horizontalRecyclerView.notifyDataSetChanged();
                        }
                        Log.v("LOG_TAG", "Selected Images" + mArrayUri.size());
                    }
                }
            } else {
                Toast.makeText(this, "You haven't picked Image", Toast.LENGTH_LONG).show();
            }
        } catch (Exception e) {
            Toast.makeText(this, "Something went wrong", Toast.LENGTH_LONG).show();
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 04 февраля 2020

Думайте о том, что RecyclerView может показывать пустую коллекцию. Если вы определите в макете RecyclerView (wrap_content, wrap_content), то в пустом сценарии представление будет 0dp x 0dp и будет действительным.

Хорошая вещь в том, что вы всегда устанавливали RecyclerView, инициализировал адаптер и никогда не получал NullPointerExceptions.

. Вы можете иметь в Activity.onCreate ():

imagesRecyclerView = findViewById(R.id.someId);
horizontalAdapter = new HorizontalAdapter();
imagesRecyclerView.setAdapter(horizontalRecyclerView);
imagesRecyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));

Обратите внимание, что я изменил имя адаптера, потому что «горизонтальный-горизонтальный просмотр»! = RecyclerView. И "горизонтальный адаптер" == Адаптер.

0 голосов
/ 04 февраля 2020

установите layout-manager в вашем коде

LinearLayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
horizontalRecyclerView.setLayoutManager(mLayoutManager);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...