это потому что вы назначаете "контекст с самим собой".передать контекст из класса, где вы инициализируете свой адаптер.
предположим, у меня есть адаптер с именем "ClubAdapter" и вызывающим классом с именем "ClubClass"
в ClubClass:
ClubAdapter clubAdapter = new ClubAdapter(list, context);
// if you'r calling it from activity then pass "Activity.this" and if fragment then "getContext()" as context.
и в ClubAdapter
public class ClubAdapter extends RecyclerView.Adapter<ClubAdapter.ClubHolder> {
private Context context;
private List<String> list;
public ClubAdapter(List<String> list, Context context) {
this.list = list;
this.context = context;
}
@NonNull
@Override
public ClubHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View itemView = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.item_sample, viewGroup, false);
return new ClubHolder(itemView, context);
}
public class ClubHolder extends RecyclerView.ViewHolder {
private Context context;
private ClunHolder(@NonNull View itemView,Context context) {
super(itemView);
this.context = context;
}
}
}
или вы можете сделать подобный интерфейс.
public interface RecycleViewOnItemClickListener {
void onItemClick(int position);
}
и передать его адаптеру из вызывающего класса.
предположим, что у меня есть адаптер с именем "SampleAdapter" и вызывающий класс с именем "SampleClass" В "SampleClass"msgstr "вы можете передать интерфейс в Адаптер как параметр.
SampleAdapter sampleAdapter = new SampleAdapter(list, new RecycleViewOnItemClickListener() {
@Override
public void onItemClick(int position) {
// do what you want to perform
}
});
В "ClubAdapter"
public class ClubAdapter extends RecyclerView.Adapter<ClubAdapter.ClubHolder> {
private RecycleViewOnItemClickListener recycleViewOnItemClickListener;
private List<String> list;
public ClubAdapter(List<String> list, RecycleViewOnItemClickListener recycleViewOnItemClickListener) {
this.list = list;
this.recycleViewOnItemClickListener = recycleViewOnItemClickListener;
}
@NonNull
@Override
public ClubHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View itemView = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.item_sample, viewGroup, false);
return new ClubHolder(itemView, recycleViewOnItemClickListener);
}
public class ClubHolder extends RecyclerView.ViewHolder {
private RecycleViewOnItemClickListener recycleViewOnItemClickListener;
private ClunHolder(@NonNull View itemView,RecycleViewOnItemClickListener recycleViewOnItemClickListener) {
super(itemView);
this.recycleViewOnItemClickListener = recycleViewOnItemClickListener;
//you can callback onItemClick method from here on button click event so it give callback in "ClubActivity".
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
recycleViewOnItemClickListener.onItemClick(getAdapterPosition());
}
});
}
}
}