簡體   English   中英

無法在RecylerView Adapter中獲得視圖的位置

[英]Can't get the position for view inside RecylerView Adapter

我的回收站視圖適配器如下

    @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 viewHolder.removeContact時刪除該行。我也嘗試通過getTag()方法獲得該位置,但它只給我一個位置,即0。

感謝@ pskink.Thanks。 解決的問題是我所做的就是將適配器和contacts arraylist的引用傳遞給這樣的視圖持有者類

@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是要返回的View, this是適配器參考,而contacts是我必須在單擊按鈕時更新的arraylist.My ViewHolder類看起來像這樣

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());
            }
        });
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM