ghost
ghost

Reputation: 24

Starting activity from onClickListener inside RecyclerView

Here i am using RecycleView unfortunately my app crashes when I click on item

public class ContactAdapter extends RecyclerView.Adapter<ContactAdapter.ContactViewHolder> {

    private Context mContext;
    private List<ContactInfo> contactList;
    private static OnItemClickListener ItemClickListener;

    public ContactAdapter(Context context , List<ContactInfo> contactList) {
        this.contactList = contactList;
        this.mContext = context;
    }


    @Override
    public int getItemCount() {
        return contactList.size();
    }

    @Override
    public void onBindViewHolder(ContactViewHolder contactViewHolder, int i) {
       final ContactInfo ci = contactList.get(i);
        contactViewHolder.vName.setText(ci.name);
        contactViewHolder.vSurname.setText(ci.surname);
        contactViewHolder.vEmail.setText(ci.title);
        contactViewHolder.vTitle.setText(ci.email);

    }

    @Override
    public ContactViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
            View itemView = LayoutInflater.
                    from(viewGroup.getContext()).
                    inflate(R.layout.cardview, viewGroup, false);

            return new ContactViewHolder(itemView);
    }



    public static class ContactViewHolder extends RecyclerView.ViewHolder  implements View.OnClickListener, View.OnLongClickListener{

        protected TextView vName;
        protected TextView vSurname;
        protected TextView vEmail;
        protected TextView vTitle;
        private OnItemClickListener clickListener;

        public ContactViewHolder(View v) {
            super(v);
            vName =  (TextView) v.findViewById(R.id.txtName);
            vSurname = (TextView)  v.findViewById(R.id.txtSurname);
            vEmail = (TextView)  v.findViewById(R.id.txtEmail);
            vTitle = (TextView) v.findViewById(R.id.title);

            v.setTag(v);
            v.setOnClickListener(this);
            v.setOnLongClickListener(this);
        }

        public void setClickListener(OnItemClickListener itemClickListener) {
            this.clickListener = itemClickListener;
        }
        @Override
        public void onClick(View view) {
            clickListener.onClick(view, getLayoutPosition(),false);
        }

        @Override
        public boolean onLongClick(View view) {
            clickListener.onClick(view, getLayoutPosition() , true);
            return true;
        }
    }



    public interface OnItemClickListener {
        void onClick(View view, int layoutPosition, boolean b);
    }


    public void SetOnItemClickListener(final OnItemClickListener mItemClickListener) {
        this.ItemClickListener = mItemClickListener;
    }
}

Here is my MainActivity, when I try to use SetOnItemClickListener it crashes

   final ContactAdapter ca = new ContactAdapter(getApplicationContext(),createList(30));

        recList.setAdapter(ca);

        ca.SetOnItemClickListener(new ContactAdapter.OnItemClickListener() {
            @Override
            public void onClick(View view, int layoutPosition, boolean b) {

                Intent intent = new Intent("com.example.as.a.aa_Detail");
                startActivity(intent);
            }
        });
    }

Upvotes: 0

Views: 121

Answers (2)

Ferdous Ahamed
Ferdous Ahamed

Reputation: 21736

Update your ContactViewHolder as below:

public static class ContactViewHolder extends RecyclerView.ViewHolder  implements View.OnClickListener, View.OnLongClickListener 
{
    protected TextView vName;
    protected TextView vSurname;
    protected TextView vEmail;
    protected TextView vTitle;

    public ContactViewHolder(View v) {
        super(v);
        vName =  (TextView) v.findViewById(R.id.txtName);
        vSurname = (TextView)  v.findViewById(R.id.txtSurname);
        vEmail = (TextView)  v.findViewById(R.id.txtEmail);
        vTitle = (TextView) v.findViewById(R.id.title);

        v.setTag(v);
        v.setOnClickListener(this);
        v.setOnLongClickListener(this);
    }


    @Override
    public void onClick(View view) {
        ItemClickListener.onClick(view, getAdapterPosition(),false);
    }

    @Override
    public boolean onLongClick(View view) {
        ItemClickListener.onClick(view, getAdapterPosition(), true);
        return true;
    }
}

To verify that an app exists to receive the intent Intent("com.example.as.a.aa_Detail"), call resolveActivity() on your Intent object.

ca.SetOnItemClickListener(new ContactAdapter.OnItemClickListener() {
        @Override
        public void onClick(View view, int layoutPosition, boolean b) {

            Intent intent = new Intent("com.example.as.a.aa_Detail");

            if (intent.resolveActivity(getPackageManager()) != null) {
                startActivity(intent);
            }
        }
    });

Hope this will help you to resolve this problem.

Upvotes: 0

mudit pant
mudit pant

Reputation: 104

I think you have not initialized clickListener in your viewhHolder. The clicklistener is null and is causing the crash. You need to set its value by calling its corresponding set method.

Upvotes: 1

Related Questions