Reputation: 24
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
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
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