点击RecyclerView项目中的每个按钮

时间:2018-02-11 18:58:56

标签: android android-recyclerview onclicklistener android-adapter recycler-adapter

如何获取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);
        }
    });

}

2 个答案:

答案 0 :(得分:3)

如果您需要 onBindViewHolder ,那么您可以使用

holder.getAdapterPosition();

如果你需要这个位置点击活动和片段,那么你必须使用从持有者到活动和片段的回调,并且必须传递相同的getAdapterPosition();

修改:在片段/活动中添加了聆听位置的示例代码

第1步:进行界面或回调

public interface RecyclerViewClickListener {

    void onClick(View view, int position);
}

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

public YourAdapter(List<SomeModel> modelList, RecyclerViewClickListener listener){
 this.clickListener = listener;
}

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

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

答案 1 :(得分:0)

使用 holder.getAdapterPosition();

public void onBindViewHolder(final 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 ) {
        Toast.makeText(getContext(), "The position is: "+holder.getAdapterPosition(), Toast.LENGTH_SHORT).show();
        Intent intent = new Intent(v.getContext(), MapsActivity.class);
        mContext.startActivity(intent);
    }
});}