在RecyclerView项目中的每个按钮上单击

You*_*mad 0 android android-adapter onclicklistener recycler-adapter android-recyclerview

如何获得RecyclerView项目内单击按钮的位置

这是我的onBindViewHolder:

  public void onBindViewHolder(MyViewHolder holder, int position) {
    Masar masar=masrList.get(position);
    holder.masarName.setText(masar.getMasarTitle());
    holder.masarDesc.setText(masar.getMasarDescreption());

    //How to get the Position 

    holder.masarImg.setImageResource(masar.getMasarImg());

    holder.mapBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v ) {
            //if you need position, just use recycleViewHolder.getAdapterPosition();
            Intent intent = new Intent(v.getContext(), MapsActivity.class);
            mContext.startActivity(intent);
        }
    });

}
Run Code Online (Sandbox Code Playgroud)

vik*_*mar 5

如果仅需要onBindViewHolder,则可以使用

holder.getAdapterPosition();
Run Code Online (Sandbox Code Playgroud)

如果您需要在活动和片段中单击此位置,则必须使用从持有人到活动和片段的回调,并且必须传递相同的getAdapterPosition();

编辑:在片段/活动中添加了用于收听位置点击的示例代码

步骤1:建立介面或回呼

public interface RecyclerViewClickListener {

    void onClick(View view, int position);
}
Run Code Online (Sandbox Code Playgroud)

步骤2:在片段或活动中初始化适配器类时,将上面创建的引用作为参数传递

public YourAdapter(List<SomeModel> modelList, RecyclerViewClickListener listener){
 this.clickListener = listener;
}
Run Code Online (Sandbox Code Playgroud)

第3步:在ViewHolder或类似的类中进行视图初始化,请执行以下操作

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    private Button mapBtn;

    ViewHolder(View v, RecyclerViewClickListener listener) {
        super(v);
        mapBtn = findViewById(R.id.mapBtn);
        mListener = listener;
        mapBtn.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        mListener.onClick(view, getAdapterPosition());
    }
}
Run Code Online (Sandbox Code Playgroud)

您将在片段或活动中获得初始化适配器时传递回调引用的位置。