Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';t获取RecylerView适配器内部视图的位置_Java_Android_Android Listview_Android Recyclerview - Fatal编程技术网

Java Can';t获取RecylerView适配器内部视图的位置

Java Can';t获取RecylerView适配器内部视图的位置,java,android,android-listview,android-recyclerview,Java,Android,Android Listview,Android Recyclerview,我的回收器视图适配器如下所示 @Override public ContactViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View itemView = LayoutInflater.from(viewGroup.getContext()). inflate(R.layout.contacts_list_item, viewGroup

我的回收器视图适配器如下所示

    @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
时删除行。我也尝试过通过getTag()方法获取位置,但它只给我一个位置ie 0。

感谢@pskink.Thank。解决了这个问题,我所做的就是像这样将适配器和联系人的引用传递给我的视图持有者类

@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);
    }
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());
            }
        });
    }
}
其中,
itemView
是要返回的视图,
this
是适配器引用,
contacts
是我在单击按钮时必须更新的数组列表。我的ViewHolder类如下所示

@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);
    }
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());
            }
        });
    }
}
class ContactViewHolder扩展了RecyclerView.ViewHolder{
公共文本查看联系人姓名、联系人号码;
公共图像按钮删除联系人;
私人名单联系人1;
私人联络员联络员联络员1;
公共联系人视图持有人(查看项目视图、联系人适配器、联系人适配器、最终联系人列表){
超级(项目视图);
这个。contacts1=contacts;
this.contactsAdapter1=contactsAdapter;
contactName=(TextView)itemView.findViewById(R.id.tv\u contactName);
contactNumber=(TextView)itemView.findViewById(R.id.tv\u contactNumber);
removeContact=(ImageButton)itemView.findViewById(R.id.ib_removietem);
removeContact.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
触点1.移除(getPosition());
contactsAdapter1.notifyItemRemoved(getPosition());
}
});
}
}

如果使用
int-toggedPosition=Integer.parseInt(v.getTag().toString())
会得到什么值?相同的0。还尝试将位置设置为最终位置,也会得到值0see,或者如果确实不希望它是内部类,请将适配器引用传递到ContactsViewHolder构造函数onCreateViewHolder:返回新ContactsViewHolder(yourRootView,这个);