Я пытаюсь сделать кликабельный RecyclerView
, я смотрел учебник о том, как это сделать, но он дал мне интерфейс NullPointerException
, когда я нажимал RecyclerView
.
public class ViewHolder extends RecyclerView.ViewHolder {
View mView;
private ViewHolder.ClickListener mClickListener;
public interface ClickListener{
void onItemClick(View view, int position);
}
public void setOnClickListener(ViewHolder.ClickListener clickListener){
mClickListener = clickListener;
}
public ViewHolder(View itemView){
super(itemView);
mView = itemView;
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mClickListener.onItemClick(v, getAdapterPosition()); //Line that called the Exception
}
});
}
}
Это как-то связано с интерфейсом?Нужно ли передавать интерфейс адаптеру, как этот предлагает?
Вот исключение
java.lang.NullPointerException: Attempt to invoke interface method 'void com.example.jobseeker.ViewHolder$ClickListener.onItemClick(android.view.View, int)' on a null object reference
at com.example.jobseeker.ViewHolder$1.onClick(ViewHolder.java:32)
...etc.
Вот адаптер
adapter = new FirebaseRecyclerAdapter<Model, ViewHolder>(options) {
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull final ViewGroup viewGroup, int i) {
final View view = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.row, viewGroup, false);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TextView mCompNameTv = view.findViewById(R.id.rCompNameTv);
TextView mDescTv = view.findViewById(R.id.rDescTv);
TextView mPosTv = view.findViewById(R.id.rPosTv);
ImageView mImageTv = view.findViewById(R.id.rImageIv);
String mCompName = mCompNameTv.getText().toString();
String mDesc = mDescTv.getText().toString();
String mPos = mPosTv.getText().toString();
Drawable mDrawable = mImageTv.getDrawable();
Bitmap mBitmap = ((BitmapDrawable)mDrawable).getBitmap();
Intent intent = new Intent(viewGroup.getContext(), DetailActivity.class);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
mBitmap.compress(Bitmap.CompressFormat.PNG, 80, stream);
byte[] bytes = stream.toByteArray();
intent.putExtra("image", bytes);
intent.putExtra("companyName", mCompName);
intent.putExtra("description", mDesc);
intent.putExtra("position", mPos);
startActivity(intent);
}
});
return new ViewHolder(view);
}
@Override
protected void onBindViewHolder(@NonNull ViewHolder holder, int position, @NonNull Model model) {
holder.setDetails(model.getCompanyName(), model.getDescription(), model.getPosition(), model.getImage());
}
@Override
public int getItemCount() {
return super.getItemCount();
}
};