如何在RecyclerView中设置onClick?

时间:2018-02-22 14:53:36

标签: android

我创建了一个RecyclerView Adapter,但现在我正在努力做onClick以开启新活动。

这是我的 RecyclerView适配器类

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

private ArrayList<HashMap<String, String>> mDataset;
Context ctx;

public RecycleAdapter(ArrayList<HashMap<String, String>> mDataset) {
    this.mDataset = mDataset;
    this.ctx = ctx;
}




@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_procedure, parent, false);
    return new ViewHolder(v);
}

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

    holder.getId().setText(mDataset.get(position).get("id"));
    holder.getItemname().setText(mDataset.get(position).get("name"));
    //holder.getIvImage().setBackground(mDataset.get(position).get("icon"));

}

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

}


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

    private CardView cardView;
    private TextView itemId;
    private TextView tvName;
    private ImageView ivImage;

    public ViewHolder(View itemView) {
        super(itemView);
        itemView.setOnClickListener(this);
        itemId = itemView.findViewById(R.id.tvProfileItemName);
        tvName = itemView.findViewById(R.id.tvProfileItemAge);
        ivImage = itemView.findViewById(R.id.imageView3);

    }

    public TextView getId() {
        return itemId;
    }


    public TextView getItemname() {
        return tvName;
    }


    public ImageView getIvImage() {
        return ivImage;
    }


    @Override
    public void onClick(View v) {


    }
 }
}

我的主要活动只显示回收者视图内的数据

 @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            ListAdapter adapter = new SimpleAdapter(MainActivity.this, contactList,
                    R.layout.list_item, new String[]{"id", "name", "icon"},
                    new int[]{R.id.id, R.id.name, R.id.icon});
            mAdapter = new RecycleAdapter(contactList);
            mRecyclerView.setAdapter(mAdapter);

        }

2 个答案:

答案 0 :(得分:0)

使用interface

recycler view adapter class

中的

    public interface recClick{
    void onClickRec(int p);
    }
private recClick rc;

public void setRecClick(recClick rc){
this.rc = rc
}
recycler view holder class

中的

    @Override
    public void onClick(View v) {

            rc.onClickRec(getAdapterPosition());
    }
MainActivity中的

使用Interface

class MainActivity implements AdapterClass.recClick{

mAdapter.setRecClick(this);

@Override
public onClickRec(int p)
{
// do someting
} 
}

答案 1 :(得分:-1)

Cookies

请记住参考您的cardview

 @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
    final int pos =position;

        holder.getId().setText(mDataset.get(position).get("id"));
        holder.getItemname().setText(mDataset.get(position).get("name"));
        //holder.getIvImage().setBackground(mDataset.get(position).get("icon"));
        holder.cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(context,NewActivity.class);
                intent.putExtra("yourValue", String.valueOf(mDataset.get(position).get(pos)));
                ctx.startActivity(intent);
            }
        });    
}