Получить контекст в onBindViewHolder в RecyclerView Adapter - PullRequest
2 голосов
/ 04 мая 2020

Я пытаюсь создать флажки программно в RecyclerViewAdapter, но я не уверен, как передать контекст в onBindViewHolder. Также стоит отметить, что я использую 4 разных класса ViewHolders.

Это класс ViewHolder, в который я хочу добавить флажки, этот код находится внутри onBindViewHolder

ViewHolderMulChoice viewHolderMulChoice = (ViewHolderMulChoice) holder;
viewHolderMulChoice.questionNumber.setText((position + 1) + ")");
viewHolderMulChoice.questionTitle.setText(current.getQuestion());
viewHolderMulChoice.questionInstructions.setText(current.getInstruction());
if (current.getOptional() == 1) {
    viewHolderMulChoice.questionOptional.setText("*");
} else {
    viewHolderMulChoice.questionOptional.setText("");
}

List<SurveyQuestionOptions> options = current.getSurvey_question_option();
for (SurveyQuestionOptions option: options) {
    CheckBox checkBox = new CheckBox(//context goes here);
    checkBox.setText(option.getOption());
    viewHolderMulChoice.options.addView(checkBox);
}

Ответы [ 4 ]

1 голос
/ 04 мая 2020

Вам не нужно воспринимать контекст как параметр конструктора. каждое представление имеет ссылку на контекст

@Override
public void onBindViewHolder(@NonNull Holder holder, int i) {
     Context context = holder.itemview.getContext();
}
1 голос
/ 04 мая 2020

Сначала вы должны получить Context

Интерфейс для глобальной информации о среде приложения. Это абстрактный класс, реализация которого обеспечивается системой Android.

    private Context context;  

   // Adapter
    public YourAdapter(Context context,..) {  
       this.context = context;  
    }  
1 голос
/ 04 мая 2020

Почему бы не передать контекст через конструктор адаптера:

В вашем адаптере:

class YourAdapter extends ......{

private Context context;
.....
.....

public YourAdapter(................., Context context){

....
...
this.context = context;
}

}

При создании адаптер в твоей деятельности:

YourAdapter adapter  = new YourAdapter(..............., YourActivity.this);
1 голос
/ 04 мая 2020

Вы можете напрямую передать Context в качестве параметра Конструктора своему адаптеру и затем получить к нему доступ.

Например:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
    private Context context;
    private String[] mDataset;

    public MyAdapter(Context context, String[] myDataset) {
        mDataset = myDataset;
        this.context = context;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...