Как передать контекст в адаптер с Dagger 2? - PullRequest
0 голосов
/ 03 декабря 2018

Я изучаю основы DI / MVP / Retrofit / Rx этого урока Dagger 2 Retrofit MVp .

И все работает отлично, но у меня есть проблемы с использованием контекста в адаптерекоторый, если бы не было намерения, я мог бы использовать какой-то метод, чтобы открыть деятельность без использования контекста, но я использую библиотеку с именем Picasso.

@Override
public void onBindViewHolder(@NonNull final BookViewHolder holder, final int position) {

    holder.txt_price.setText(new StringBuilder(bookList.get(position).Price).append(" تومان").toString());
    holder.txt_drink_name.setText(bookList.get(position).Name);

//        Picasso.with(context)
//                .load(bookList.get(position).Link)
//                .into(holder.img_product);

}

До DI я использовал Context contextно теперь я не могу просто добавить это и использовать для своей библиотеки Пикассо, что не имеет значения, использовать это или нет, я просто хочу знать, как передать контекст

@Inject
public BookAdapter(ClickListener clickListener) {
    this.clickListener = clickListener;
    bookList = new ArrayList<>();
}

Все, что я сделалбыл основан на вышеупомянутом уроке, который изменился, только мой Пикассо, который использовал контекст раньше.

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

Спасибо.

1 Ответ

0 голосов
/ 03 декабря 2018

То, что вы используете Dagger, не означает, что вы должны использовать его для всего.Часто имеет смысл не использовать Dagger для связанных с UI / View вещей.

В этом случае простейшим подходом будет использование контекста представлений.

@Override
public void onBindViewHolder(@NonNull final BookViewHolder holder, final int position) {
  final Context context = holder.itemView.getContext();

  Picasso.with(context)
    .load(bookList.get(position).Link)
    .into(holder.img_product);
}

КонечноВы также можете ввести контекст, если чувствуете, что хотите сделать это.Контекст может быть введен, как и любой другой объект, если вы связываете его с компонентом.Один из способов - привязать его непосредственно в Component.Builder или Subcomponent.Builder, используя @BindsInstance.

...