如何访问适配器android中的视图Holder外的holder元素?

时间:2016-08-25 11:56:11

标签: android android-recyclerview

我有一个ViewHolder类。

class VHHeader extends RecyclerView.ViewHolder{
        TextView txtTitle;
        RecyclerView recyclerView;

        public VHHeader(View itemView) {
            super(itemView);
            this.txtTitle = (TextView)itemView.findViewById(R.id.txtHeader);
            this.recyclerView =(RecyclerView)itemView.findViewById(R.id.recyclerView);


        }
    }

现在,我想在同一个适配器类中使用某种不同的方法访问此View Holders回收器视图。

Public void useRecyclerView(){
}

如何在此方法中使用View Holder的元素。

4 个答案:

答案 0 :(得分:3)

我认为你想在同一个适配器的某些方法中使用你的视图持有者元素。因此,您需要将视图持有者和位置传递给可以使用视图持有者元素的函数。

实施例。

@Override
            public void onBindViewHolder(final AdapterName.ViewHolder holder, final int position) {

                holder.elementname.setText(arrayList.get(position).getYourMethodName());


                holder.elementname.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                yourMethodName(holder,position);

                }
            });
        }



    //and in that method    you can use your view holder elements.

    private void yourMethodName(final AdapterName.ViewHolder holder,final int position)
    {
         holder.elementname.setText(arrayList.get(position).getYourMethodName());
    }       


//This way you can use your elements 

答案 1 :(得分:1)

据我了解,您希望对recyclelerview的项目点击进行一些更改。您不需要存储您的查看者。您可以在适配器的onBindViewHolder方法上设置clicklistener,如:

@Override
public void onBindViewHolder(final VHHeader holder, final int position) {
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Do your operations here like
            holder.txtTitle.setText("new title");
        }
    });
}
祝你好运。

答案 2 :(得分:0)

class MyViewHolder extends RecyclerView.ViewHolder {
        TextView title;
        ImageView icons;
        CheckBox checkBox;

        public MyViewHolder(View itemView) {
            super(itemView);
            title = (TextView) itemView.findViewById(R.id.title);
        }
    }

    public void onBindViewHolder(final MyViewHolder holder, final int position) {
        final CategoryChildModel current = data.getItems().get(position);

        holder.title.setText(current.getName());
}

答案 3 :(得分:0)

1. 如果要在适配器类中使用holder元素,则可以创建holder对象:

@Override
public AdapterClass.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_row, parent, false);
    adaptercontext = parent.getContext(); //to get the activity context use this line.
    MyViewHolder dataObjectHolder = new MyViewHolder(view); //in this way you can use the holder object.

}

2. 如果您想访问外部,请使用此MyViewHolder作为方法的参数,如下所示:

private void update_data(MyViewHolder holder)
{
holder.edittext1.setText("Updated value");
//for getting updated holder you can use **holder.getAdapterPosition()** to get the position of the element.
}

三江源。如果您有任何改动,请告诉我并进行更正。 享受编码。