I need to click on an item in a RecyclerView but when I try to do it it shows me the following message:
java.lang.NullPointerException: Attempt to invoke interface method 'void com.example.zero.test.Interface.ItemClickListener.onClick (android.view.View, int, boolean)' on a null object reference
What I am doing is the following:
I created an interface in the following way:
public interface ItemClickListener {
void onClick(View view,int position,boolean isLongClick);
}
After that I created a Java class for myself
public class MenuViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView txtNombre;
public ImageView imgWallpaper;
private ItemClickListener itemClickListener;
public MenuViewHolder(@NonNull View itemView) {
super(itemView);
txtNombre = (TextView)itemView.findViewById(R.id.NombreWallpaper);
imgWallpaper = (ImageView)itemView.findViewById(R.id.menu_imagen);
itemView.setOnClickListener(this);
}
public void setItemClickListener(ItemClickListener itemClickListener) {
this.itemClickListener = itemClickListener;
}
@Override
public void onClick(View view) {
itemClickListener.onClick(view,getAdapterPosition(),false);
Log.d("Mensaje","Test");
}
}
And finally in my main, I connect to a database in firebase and I show some images in the following way:
// Declaration of global variables
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference category = database.getReference("Wallpaper");
RecyclerView recycler_menu;
RecyclerView.LayoutManager layoutManager;
FirebaseRecyclerAdapter<wallpaperClass, MenuViewHolder> adapter;
// Main code
FirebaseRecyclerOptions <wallpaperClass> options =
new FirebaseRecyclerOptions.Builder<wallpaperClass>()
.setQuery(category,wallpaperClass.class)
.setLifecycleOwner(this)
.build();
adapter = new FirebaseRecyclerAdapter<wallpaperClass, MenuViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull MenuViewHolder holder, int position, @NonNull wallpaperClass model) {
holder.txtNombre.setText(model.getName());
Picasso.get().load(model.getLinkwall()).into(holder.imgWallpaper);
}
@NonNull
@Override
public MenuViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.menu_item,parent,false);
return new MenuViewHolder(v);
}
};
recycler_menu.setAdapter(adapter);
Everything works very well, the images are shown as they correspond but when I click on an image it takes me out of the app.
I thank all of you already for your help.
greetings ..
Solution: Add this code to onBindViewHolder, validate the click from that area and you're done. thank you all.
protected void onBindViewHolder(@NonNull MenuViewHolder holder, int position, @NonNull final wallpaperClass model) {
holder.txtNombre.setText(model.getName());
Picasso.get().load(model.getLinkwall()).into(holder.imgWallpaper);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getApplicationContext(), "Link: " + model.getLinkwall().toString(), Toast.LENGTH_SHORT).show();
/*Intent Wallpaper = new Intent(getApplicationContext(),homeActivity.class);
startActivity(Wallpaper);*/
}
});
}