无法在 RecyclerView Adapter 中获取视图位置
Can't get the position for view inside RecylerView Adapter
我的recycler视图适配器如下
@Override
public ContactViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View itemView = LayoutInflater.from(viewGroup.getContext()).
inflate(R.layout.contacts_list_item, viewGroup, false);
return new ContactViewHolder(itemView);
}
@Override
public void onBindViewHolder(ContactViewHolder viewHolder, int position) {
super.onBindViewHolder(viewHolder, position);
viewHolder.removeContact.setTag(position);
Contact contact = contacts.get(position);
viewHolder.contactName.setText(contact.getContactName());
viewHolder.contactNumber.setText(contact.getContactNumber());
viewHolder.removeContact.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Integer taggedPosition = (Integer) v.getTag();
Log.wtf("ad","Posirtion"+ Integer.toString(taggedPosition));
contacts.remove(Integer.parseInt(Integer.toString(taggedPosition)));
notifyItemRemoved(Integer.parseInt(Integer.toString(taggedPosition)));
}
});
}
@Override
public int getItemCount() {
return contacts.size();
}
public void removeItem(int pos) {
contacts.remove(pos);
// notifyItemRemoved(pos);
}
public void add(Contact contact, int position) {
contacts.add(position, contact);
notifyItemInserted(position);
}
我的观点持有者是
class ContactViewHolder extends RecyclerView.ViewHolder {
public TextView contactName,contactNumber;
public ImageButton removeContact;
public ContactViewHolder(View itemView) {
super(itemView);
contactName= (TextView) itemView.findViewById(R.id.tv_contactName);
contactNumber= (TextView) itemView.findViewById(R.id.tv_contactNumber);
removeContact= (ImageButton) itemView.findViewById(R.id.ib_removeItem);
}
}
问题是我似乎无法获得 viewHolder.removeContact
的位置。我想要实现的是在 viewHolder.removeContact
是 clicked.I 尝试获得该位置时删除该行也通过 getTag() 方法,但它只给了我一个位置,即 0.
感谢@pskink.Thanks。解决这个问题我所做的就是将我的适配器和 contacts
arraylist 的引用传递给我的视图持有者 class 像这样
@Override
public ContactViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View itemView = LayoutInflater.from(viewGroup.getContext()).
inflate(R.layout.contacts_list_item, viewGroup, false);
return new ContactViewHolder(itemView,this,contacts);
}
其中 itemView
是要返回的视图,this
是适配器引用,contacts
是我必须在按钮 click.My ViewHolder class 看起来像这样
class ContactViewHolder extends RecyclerView.ViewHolder {
public TextView contactName,contactNumber;
public ImageButton removeContact;
private List<Contact> contacts1;
private ContactsAdapter contactsAdapter1;
public ContactViewHolder(View itemView, ContactsAdapter contactsAdapter, final List<Contact> contacts) {
super(itemView);
this.contacts1=contacts;
this.contactsAdapter1=contactsAdapter;
contactName= (TextView) itemView.findViewById(R.id.tv_contactName);
contactNumber= (TextView) itemView.findViewById(R.id.tv_contactNumber);
removeContact= (ImageButton) itemView.findViewById(R.id.ib_removeItem);
removeContact.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
contacts1.remove(getPosition());
contactsAdapter1.notifyItemRemoved(getPosition());
}
});
}
}
我的recycler视图适配器如下
@Override
public ContactViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View itemView = LayoutInflater.from(viewGroup.getContext()).
inflate(R.layout.contacts_list_item, viewGroup, false);
return new ContactViewHolder(itemView);
}
@Override
public void onBindViewHolder(ContactViewHolder viewHolder, int position) {
super.onBindViewHolder(viewHolder, position);
viewHolder.removeContact.setTag(position);
Contact contact = contacts.get(position);
viewHolder.contactName.setText(contact.getContactName());
viewHolder.contactNumber.setText(contact.getContactNumber());
viewHolder.removeContact.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Integer taggedPosition = (Integer) v.getTag();
Log.wtf("ad","Posirtion"+ Integer.toString(taggedPosition));
contacts.remove(Integer.parseInt(Integer.toString(taggedPosition)));
notifyItemRemoved(Integer.parseInt(Integer.toString(taggedPosition)));
}
});
}
@Override
public int getItemCount() {
return contacts.size();
}
public void removeItem(int pos) {
contacts.remove(pos);
// notifyItemRemoved(pos);
}
public void add(Contact contact, int position) {
contacts.add(position, contact);
notifyItemInserted(position);
}
我的观点持有者是
class ContactViewHolder extends RecyclerView.ViewHolder {
public TextView contactName,contactNumber;
public ImageButton removeContact;
public ContactViewHolder(View itemView) {
super(itemView);
contactName= (TextView) itemView.findViewById(R.id.tv_contactName);
contactNumber= (TextView) itemView.findViewById(R.id.tv_contactNumber);
removeContact= (ImageButton) itemView.findViewById(R.id.ib_removeItem);
}
}
问题是我似乎无法获得 viewHolder.removeContact
的位置。我想要实现的是在 viewHolder.removeContact
是 clicked.I 尝试获得该位置时删除该行也通过 getTag() 方法,但它只给了我一个位置,即 0.
感谢@pskink.Thanks。解决这个问题我所做的就是将我的适配器和 contacts
arraylist 的引用传递给我的视图持有者 class 像这样
@Override
public ContactViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View itemView = LayoutInflater.from(viewGroup.getContext()).
inflate(R.layout.contacts_list_item, viewGroup, false);
return new ContactViewHolder(itemView,this,contacts);
}
其中 itemView
是要返回的视图,this
是适配器引用,contacts
是我必须在按钮 click.My ViewHolder class 看起来像这样
class ContactViewHolder extends RecyclerView.ViewHolder {
public TextView contactName,contactNumber;
public ImageButton removeContact;
private List<Contact> contacts1;
private ContactsAdapter contactsAdapter1;
public ContactViewHolder(View itemView, ContactsAdapter contactsAdapter, final List<Contact> contacts) {
super(itemView);
this.contacts1=contacts;
this.contactsAdapter1=contactsAdapter;
contactName= (TextView) itemView.findViewById(R.id.tv_contactName);
contactNumber= (TextView) itemView.findViewById(R.id.tv_contactNumber);
removeContact= (ImageButton) itemView.findViewById(R.id.ib_removeItem);
removeContact.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
contacts1.remove(getPosition());
contactsAdapter1.notifyItemRemoved(getPosition());
}
});
}
}