0

I have a navigation drawer app with couple fragments. One of them utilizes recyclerviewadapter/recyclerviewholder to display items. Switching between fragments works well but AFTER switching, clicking on an item with listener causes nullpointerexception. Now, I tested it without the listener and it works fine. I'm guessing that the listener isn't refreshed? when fragment is swiping? Can someone help me out please? Been searching for days and yet I can't fix it.

Process: com.mikepenz.materialdrawer.app.debug, PID: 30803 java.lang.NullPointerException: Attempt to invoke interface method 'void com.mikepenz.materialdrawer.app.RecyclerViewAdapter$OnItemClickListener.onItemClick(java.lang.String)' on a null object reference at com.mikepenz.materialdrawer.app.RecyclerViewAdapter$1.onClick(RecyclerViewAdapter.java:43) at android.view.View.performClick(View.java:5198) at android.view.View$PerformClick.run(View.java:21147) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewHolders> {

private List<ItemObject> itemList;
private Context context;
private OnItemClickListener listener;


public RecyclerViewAdapter(Context context, List<ItemObject> itemList) {
    this.itemList = itemList;
    this.context = context;
}

@Override
public RecyclerViewHolders onCreateViewHolder(ViewGroup parent, int viewType) {

    View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view_list, null);
    RecyclerViewHolders rcv = new RecyclerViewHolders(layoutView, context);
    return rcv;
}

@Override
public void onBindViewHolder(RecyclerViewHolders holder, final int position) {
    holder.countryName.setText(itemList.get(position).getName());
//    holder.countryPhoto.setImageResource(itemList.get(position).getPhoto());

    holder.countryName.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
      //    listener.onItemClick(itemList.get(position).getName());

            Log.d("HELLO   ",itemList.get(position).getName());
            if (position ==1)
            {
                listener.onItemClick("GA");
            }
        }
    });

}


public interface OnItemClickListener{
     void onItemClick(String textName);
}

public void setOnItemClickListener(OnItemClickListener listener){
    this.listener = listener;
}


@Override
public int getItemCount() {
    Log.e("itemlist size ", this.itemList.size() + "");
    return this.itemList.size();
}

}

1 Answers1

-2

replace your following code

   listener.onItemClick("GA");

with

if(listener!=null){
   listener.onItemClick("GA");
     }

it may be work for you, may be your listener null when you try to set onItemClick

Dhaval Solanki
  • 4,589
  • 1
  • 23
  • 39