简体   繁体   English

RecyclerView-如何将onBindViewHolder的位置传递给ViewHolder类?

[英]RecyclerView - How do I pass the position of onBindViewHolder to my ViewHolder class?

I am trying to setup onClickListeners inside my ViewHolder class, but I need the position of each. 我正在尝试在ViewHolder类中设置onClickListeners,但是我需要每个位置。 How can I pass the position from onBindViewHolder to my ViewHolder class? 如何将位置从onBindViewHolder传递给ViewHolder类?

@NonNull
@Override
public AdapterAllComments.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.model_rv_allcomments_container, viewGroup, false);

    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull AdapterAllComments.ViewHolder viewHolder, int position) {


}

@Override
public int getItemCount() {
    return mCommentId.size();
}

public class ViewHolder extends RecyclerView.ViewHolder{



    LinearLayout viewHolderLayout;


    public ViewHolder(@NonNull View itemView) {
        super(itemView);

        viewHolderLayout = itemView.findViewById(R.id.item_child_layout);

    }
}

this adapter from my other project : 这个适配器来自我的其他项目:

    public class ChildrenRvAdapter extends RecyclerView.Adapter<ChildrenRvAdapter.ViewHolder> {

    private List<String> mData;
    private LayoutInflater mInflater;
    private ItemClickListener mClickListener;
    private Context context;

    public ChildrenRvAdapter(Context context, List<String> data) {
        this.mInflater = LayoutInflater.from(context);
        this.mData = data;
        this.context = context;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = mInflater.inflate(R.layout.children_rv_row, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        String name = mData.get(position);
        holder.tv_name.setText(name);
        setAnimation(holder.itemView, position);
    }

    @Override
    public int getItemCount() {
        return mData.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        TextView tv_name;
        Button btn_remove;

        ViewHolder(View itemView) {
            super(itemView);
            tv_name = itemView.findViewById(R.id.tv_name);
            btn_remove = itemView.findViewById(R.id.btn_remove);
            btn_remove.setOnClickListener(this);
        }

        @Override
        public void onClick(View view) {
            if (mClickListener != null) mClickListener.onItemClick(view, getAdapterPosition());
        }
    }

    String getItem(int id) {
        return mData.get(id);
    }

    public void setClickListener(ItemClickListener itemClickListener) {
        this.mClickListener = itemClickListener;
    }

    public interface ItemClickListener {
        void onItemClick(View view, int position);
    }

    }
}

so you create interface in your adapter and also declare it in local mClickListener and implement it in ViewHolder class and setonclick where you create the viewholder : 因此,您可以在适配器中创建interface ,还可以在本地mClickListener声明interface ,并在ViewHolder类和setonclick在创建setonclick位置进行viewholder

    ViewHolder(View itemView) {
        super(itemView);
        tv_name = itemView.findViewById(R.id.tv_name);
        btn_remove = itemView.findViewById(R.id.btn_remove);
        btn_remove.setOnClickListener(this);
    }

just note that i set it on a button but you can set it on itemView also on any view that have the setOnClickListener so you can use : 只是请注意,我把它放在一个button但你可以把它放在itemView还上的任何view认为有setOnClickListener所以你可以使用:

itemView.setOnClickListener(this);

then from your activity or fragment and wherever using the adapter, just implemet the onlick interface and after initializing the adapter use the method that we created public void setClickListener in our adapter, to local interface in the adapter 然后从您的活动或片段以及无论使用适配器的任何地方,只需实现onlick interface并在初始化适配器后,使用我们在适配器中创建public void setClickListener onlick的方法,即可到适配器的本地接口

 public void setClickListener(ItemClickListener itemClickListener) {
    this.mClickListener = itemClickListener;
}

activity: 活动:

public class ChildrenEditDialog extends Dialog implements IChildren.IView, ChildrenRvAdapter.ItemClickListener

and in activity onCreate or somewhere else: 在活动onCreate或其他地方:

 childrenRvAdapter = new ChildrenRvAdapter(c, dataSource);
    childrenRvAdapter.setClickListener(this);

and you have onlcick in your activity/fragment/dialog/etc... 并且您的活动/片段/对话/等中有onlcick ...

使用ViewHolders getAdapterPosition()获取ViewHolder的当前位置。

To get the current position of the onBindViewHolder to ViewHolder class getAdapterPosition() can be used. 要将onBindViewHolder的当前位置获取到ViewHolder类,可以使用getAdapterPosition()

As an example, 举个例子,

public class ViewHolder extends RecyclerView.ViewHolder{
    LinearLayout viewHolderLayout;

    viewHolderLayout = itemView.findViewById(R.id.item_child_layout);

    public ViewHolder(@NonNull View itemView) {
        super(itemView);

        viewHolderLayout.setOnClickListener(v -> {
            lastClickedPosition = getAdapterPosition();
        });

    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 从onBindViewHolder传递变量(位置)到ViewHolder类 - Passing variable(position) from onBindViewHolder to ViewHolder class Recyclerview ViewHolder:onCreateViewHolder,视图绑定和onBindViewHolder在同一个类中 - Recyclerview ViewHolder : onCreateViewHolder , view binding and onBindViewHolder in the same class 如何在 onBindViewHolder() 中调整 ViewHolder 高度? - How can I adjust the ViewHolder height in onBindViewHolder()? 如何在其适配器的onBindViewHolder中更新recyclerView? - How do I update recyclerView inside onBindViewHolder of its adapter? RecyclerView onBindViewHolder位置不如预期 - RecyclerView onBindViewHolder position not as expected onBindViewHolder(RecyclerView.ViewHolder持有人,整数位置)-无法访问持有人的“有趣”-Kotlin to Java - onBindViewHolder(RecyclerView.ViewHolder holder, int position) - can't access holder's 'fun' - Kotlin to Java 那么如何返回正确的RecyclerView.ViewHolder - So how do I return the correct RecyclerView.ViewHolder 为什么 onBindViewHolder 中的 RecyclerView.Adapter 看不到 ViewHolder 的变量? - Why my RecyclerView.Adapter in onBindViewHolder can't see variable from ViewHolder? ViewHolder 中 ImageView 的位置使用 .getLeft() 返回 0。 如何在 ViewHolder 中获取 ImageView 的位置 - Position of ImageView in ViewHolder returns 0 using .getLeft(). How do I get the position of an ImageView inside a ViewHolder 我应该在onBindViewHolder中放入什么来绑定模型并填充RecyclerView? - What do i put in onBindViewHolder to bind my models and populate my RecyclerView?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM