Есть список имен, по которому нажимаю. После чего должен сохраняться нажатый элемент, который я использую в другом фрагменте.
Список загружается, но при кликах на имена выбивает следующую ошибку:
java.lang.NullPointerException: Attempt to invoke interface method 'void com.vm.sai.adapters.PersonAdapter$OnRecItemClickListener.onRecItemClick(int)' on a null object reference
at com.vm.sai.adapters.PersonAdapter$PersonViewHolder.onClick(PersonAdapter.java:57)
Код адаптера:
public class PersonAdapter extends RecyclerView.Adapter<PersonAdapter.PersonViewHolder> {
List<String> perscategories;
OnRecItemClickListener onRecItemClickListener;
public PersonAdapter(List<String> perscategories, OnRecItemClickListener onRecItemClickListener) {
this.onRecItemClickListener = onRecItemClickListener;
this.perscategories = perscategories;
}
public interface OnRecItemClickListener {
void onRecItemClick(int position);
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}
public static class PersonViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private TextView personName;
private int position;
private OnRecItemClickListener onRecItemClickListener;
PersonViewHolder(View itemView, OnRecItemClickListener onRecItemClickListener) {
super(itemView);
personName = (TextView) itemView.findViewById(R.id.persname);
personName.setOnClickListener(this);
}
public void bind(String text, int position) {
this.position = position;
personName.setText(text);
}
@Override
public void onClick(View v) {
onRecItemClickListener.onRecItemClick(position);
}
}
@Override
public PersonViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.person_list_item, viewGroup, false);
return new PersonViewHolder(v, onRecItemClickListener);
}
@Override
public void onBindViewHolder(PersonViewHolder personViewHolder, final int position) {
personViewHolder.bind(perscategories.get(position), position);
}
@Override
public int getItemCount() {
return perscategories.size();
}
}
Фрагмент в котором создаю экземпляр класса:
private void initializeAdapter() {
PersonAdapter personAdapter = new PersonAdapter(personCategories, new PersonAdapter.OnRecItemClickListener() {
@Override
public void onRecItemClick(int position) {
saveFavorites(position);
}
});
recyclerView.setAdapter(personAdapter);
}
Данное исключение говорит о том, что Вы пытаетесь вызвать метод на объекте, который проинициализирован значением null
.
Вы пытаетесь вызвать метод onRecItemClick(...)
на объекте onRecItemClickListener
, в котором находится null
.
Решением данной проблемы будет инициализация объекта onRecItemClickListener
(до его использования).
Вы передали слушатель в холдер, но не присвоили его переменной холдера.
Можно по разному решить
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Отправляю файл на сервер с помощью Retrofit2, использую POST метод для отправки файла, POST метод принимает два параметра "file" и "shared-with":
Пытаюсь воспроизвести закодированный h264 в MPEG-TS видеопоток, используя стандартный VideoViewВся программа состоит из одной activity с VideoView, Button и EditText
Пытаюсь вывести иконки для пунктов меню, но не совсем знаю как правильно это сделатьПриложение делает следующее: Есть файл json с объектами