Как загрузить картинку из интернета в RecyclerView?

155
09 мая 2019, 10:30

Помогите с этим! Нужно, чтобы в самой активности я указывал ссылку на картинку, если знаете как сделать это через glide, picasso, любую библиотеку.

Заполнять данные надо так:

mList.add("www.example.com/image1.png");
mList.add("www.example.com/image1.png");
mList.add("www.example.com/image1.png");

Если нельзя так, то подскажите способ близкий к этому. Спасибо

Вот код адаптера.

public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder> {
private List<Integer> mList = new ArrayList<>();
private CardAdapterHelper mCardAdapterHelper = new CardAdapterHelper();
public CardAdapter(List<Integer> mList) {
    this.mList = mList;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_card_item, parent, false);
    mCardAdapterHelper.onCreateViewHolder(parent, itemView);
    return new ViewHolder(itemView);
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
    mCardAdapterHelper.onBindViewHolder(holder.itemView, position, getItemCount());
   // holder.mImageView.setImageResource(mList.get(position));
    Glide.with(holder.itemView.getContext())
            .load(mList.get(position))
            .into(holder.mImageView);

    holder.mImageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            ToastUtils.show(holder.mImageView.getContext(), "" + position);
        }
    });
}
@Override
public int getItemCount() {
    return mList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
    public final ImageView mImageView;
    public ViewHolder(final View itemView) {
        super(itemView);
        mImageView = (ImageView) itemView.findViewById(R.id.imageView);
    }
  }
}

Вот как заполняются данные сейчас:

public class SGalleryActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private ImageView mBlurView;
private List<Integer> mList = new ArrayList<>();
private CardScaleHelper mCardScaleHelper = null;
private Runnable mBlurRunnable;
private int mLastPos = -1;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    setContentView(R.layout.activity_sgallery);
    init();
}
private void init() {
    mList.add(R.drawable.shop1);
    mList.add(R.drawable.shop2);
    mList.add(R.drawable.shop7);
    mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
    final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getApplicationContext());
    linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
    linearLayoutManager.setReverseLayout(false);
    mRecyclerView.setLayoutManager(linearLayoutManager);
    mRecyclerView.setAdapter(new CardAdapter(mList));
    mCardScaleHelper = new CardScaleHelper();
    mCardScaleHelper.setCurrentItemPos(0);
    mCardScaleHelper.attachToRecyclerView(mRecyclerView);
}
...
Answer 1

В методе onBindViewHolder(...) адаптера recycleriew:

String url = myUrls.get(position); //каким-то образом получаете ссылку
GlideApp
.with(context) // здесь получаете контекст
.load(url)
.placeholder(R.drawable.shop1) // плейсхолдер на время пока не загрузится картинка
.into(holder.imageView); //из холдера получаете imageView

Информация по подключению и работе с библиотекой здесь.

Answer 2

Вот так заполняем

@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
    mCardAdapterHelper.onBindViewHolder(holder.itemView, position, getItemCount());
    String currentUrl = mList.get(position);
    Glide.with(holder.itemView.getContext())
            .load(currentUrl)
            .into(holder.mImageView);
    holder.mImageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            ToastUtils.show(holder.mImageView.getContext(), "" + position);
        }
    });
}
Answer 3

Сперва загружаем Pikasso пишем нижний код в build.gradle

implementation 'com.squareup.picasso:picasso:2.5.2'

Наш layout layout_recyler_language.xml

<LinearLayout android:orientation="vertical"
android:padding="5dp"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto">
<FrameLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <TextView
        android:id="@+id/goodText"
        android:textSize="20dp"
        android:textColor="@color/filColor"
        style="@style/editTextEntryName"
        android:layout_width="match_parent"
        android:layout_height="@dimen/height_of_textview"
        android:paddingLeft="60dp"
        android:paddingTop="10dp"
        android:text="ddasdasa"
        android:drawablePadding="5dp"
        android:background="@drawable/custom_edit_text"
        />
    <ImageView
        android:id="@+id/img"
        android:layout_margin="10dp"
        android:layout_width="wrap_content"
        android:layout_gravity="center_vertical"
        android:background="@drawable/logo_small"
        android:layout_height="wrap_content" />
</FrameLayout></LinearLayout>

MainActivity.java в методе onCreate

ArrayList<LanguageRecycler> lang= new ArrayList<>();
    LanguageRecycler array= new LanguageRecycler("English","http://www.picshare.ru/uploads/190215/caa2BA7OG6.png");
    lang.add(array);
    array=new LanguageRecycler("Português","http://www.picshare.ru/uploads/190215/j28hxj6CjV.png");
    lang.add(array);
    array=new LanguageRecycler("Français","http://www.picshare.ru/uploads/190215/jU2hxj6CjV.png");
    lang.add(array);
    array=new LanguageRecycler("Italiano","http://www.picshare.ru/uploads/190215/j28hxj6CjV.png");
    lang.add(array);
    // Настраиваем наш recyclerView
    RecyclerView recyclerView = findViewById(R.id.recycler);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    adapter = new LanguageAdapter(this, lang);
    recyclerView.setAdapter(adapter);

Готовым свой шаблон по которому будем работать LanguageRecycler.java

public class LanguageRecycler {
private String icon;
private String name;
public LanguageRecycler(){
}
public LanguageRecycler(String name,String icon){
    this.icon=icon;
    this.name=name;
}
public String getIcon(){
    return this.icon;
}
public String getName(){
    return this.name;
}}

Свой адаптер для LanguageRecycler.java создаем LanguageAdapter.java

 private List<LanguageRecycler> mData;
private List<String> icons;
private Context context;
private LayoutInflater mInflater;
private ItemClickListener mClickListener;
// data is passed into the constructor
LanguageAdapter(Context context, List<LanguageRecycler> data) {
    this.mInflater = LayoutInflater.from(context);
    this.mData = data;
    this.context=context;
}
// inflates the row layout from xml when needed
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = mInflater.inflate(R.layout.layout_recyler_language, parent, false);
    return new ViewHolder(view);
}
// тут пишем нащи вставные данные
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    LanguageRecycler animal = mData.get(position);
    holder.myTextView.setText(animal.getName());
    Log.d("Daasd",animal.getIcon());
    //для работы с картинками
    Picasso.with(context).load(animal.getIcon()).placeholder(R.drawable.logo_small).into(holder.img);
}

// количество строк
@Override
public int getItemCount() {
    return mData.size();
}
READ ALSO
Использование изображения в SplashScreen как фон (на весь экран)

Использование изображения в SplashScreen как фон (на весь экран)

Доброй ночиПодскажите пожалуйста, как мне быть

166
JavaFX и создание метода

JavaFX и создание метода

Для определенных целей мне нужно создать метод, который будет вызывать диалоговое окно с пользователем ( TextInputDialog ), после ввода пользователем...

140
Оправка строки на сервер с формы HTML

Оправка строки на сервер с формы HTML

Есть строки, которые выводятся циклом на страницуМне необходимо при нажатии на кнопку отправить данные товара на сервер, который занесет...

152