Получить источники изображений из строки и отобразить их в программе повторного просмотра? - PullRequest
0 голосов
/ 15 апреля 2020

Я использую RecyclelerView для отображения изображений (в папке для рисования), это просто упражнение, и у меня есть массив из трех объектов (ImageModel), у каждого ImageModel есть поле, я называю его изображением (String), ImageModel имеет его конструктор и геттеры и сеттеры (очень базовый c класс), ..

Теперь я показываю три блока изображений с одним и тем же изображением, я использую идентификатор изображения для его отображения, image.setImageResource (R) .drawable.newimage); но я хочу отобразить несколько изображений на основе поля изображения (URL или часть URL)

Это мой класс адаптер, go последние 10 строк, чтобы увидеть мою проблему, на самом деле не проблема, но Я не знаю, как сделать это динамически c, потому что у меня сейчас три модели изображений, у меня может быть 5, может 20, я не знаю ..

public class ImageListAdapter extends RecyclerView.Adapter<ImageListAdapter.ImageViewHolder>{

    public List<ImageModel> images = new ArrayList<ImageModel>();
    public Context context;

    public ImageListAdapter(Context context, List<ImageModel> contracts){
        this.context = context;
        this.images.clear();
        this.images.addAll(contracts);
        Log.d("TAG", "ADAPTER");
    }

    public void updateImages(List<ImageModel> newImages){
        images.clear();
        images.addAll(newImages);
        notifyDataSetChanged();
    }

    @NonNull
    @Override
    public ImageListAdapter.ImageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.image, parent, false); // ContratBinding >> as your list item layout named "contrat"
        return new ImageListAdapter.ImageViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ImageListAdapter.ImageViewHolder holder, int position) {
        holder.bind(images.get(position));
    }

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

    public class ImageViewHolder extends RecyclerView.ViewHolder {

        @BindView(R.id.img)
        ImageView image;

        public ImageViewHolder(View iview){
            super(iview);
            Log.d("TAG", "VIEW HOLDER");
            ButterKnife.bind(this, iview);
        }
        void bind(ImageModel imageModel){
            image.setImageResource(R.drawable.newimage);
        }
    }


}

Любая помощь будет высоко ценится.

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

Попробуйте добавить другое поле как Id (Int) в ImageModel и добавьте свой идентификатор источника изображения (R.drawable.image1) в свой список.

ImageModel ( id = R.drawable.image1, image = image1)

 void bind(ImageModel imageModel){
            image.setImageResource(imageModel.id);
        }

Или если вы добавляете имя источника изображения в строковой переменной image в ImageModel, вы можете динамически получить изображение из режима рисования, как показано ниже

ImageModel ( image = image1)

 void bind(ImageModel imageModel){
       String uri = "@drawable/"+imageModel.image; //don't use extension like .png or .jpg
       int imageResource = context.getResources().getIdentifier(uri,null,getPackageName());
       Drawable res = context.getResources().getDrawable(imageResource);
       image.setImageDrawable(res);
   }
0 голосов
/ 15 апреля 2020

Добавить зависимость Пикассо в файл build.gradle

implementation 'com.squareup.picasso:picasso:2.71828'

Затем внедрить код внутри функции связывания

void bind(ImageModel imageModel)
{

   Picasso.get().load(your_image_url_string).into(image);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...