android - 如何在 OnClickListener android 上获取选定的 CardView 位置?

标签 android android-adapter android-recyclerview android-cardview

我有联系人列表,我已使用 CardView 在 RecyclerView 上显示此列表。

列表显示完美但现在我想制作可点击的卡片 View 。这样当我点击特定联系人时,我将显示特定联系人的详细信息。

当我点击特定的 CardView 时,我 Toast 一条消息,但找不到所选 cardview 的位置,并且想使用 intent.putExtra 方法将所选联系人的详细信息传递给另一个 Activity 。

代码:

  @Override
public ContactViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view_layout, parent, false);
    ContactViewHolder contactViewHolder = new ContactViewHolder(view,ctx,contacts);
    return contactViewHolder;
}

@Override
public void onBindViewHolder(ContactViewHolder holder, int position) {
    Contact CON = contacts.get(position);
    holder.person_name.setText(CON.getName());
    holder.person_email.setText(CON.getEmail());
    holder.card_view.setOnClickListener(this);
}
@Override
public void onClick(View v) {
    Toast.makeText(this.ctx, "Hello", Toast.LENGTH_SHORT).show();
    Intent intent = new Intent(this.ctx,task_detail.class);
    this.ctx.startActivity(intent);
}

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

public static class ContactViewHolder extends RecyclerView.ViewHolder {
    TextView person_name, person_email;
    ArrayList<Contact> contacts = new ArrayList<Contact>();
    Context ctx;
    CardView card_view;

    public ContactViewHolder(View view, Context ctx ,ArrayList<Contact> contacts) {
        super(view);
        this.contacts=contacts;
        this.ctx = ctx;
        person_name = (TextView) view.findViewById(R.id.person_name);
        person_email = (TextView) view.findViewById(R.id.person_email);
        card_view =  (CardView) view.findViewById(R.id.card_view);
    }
}

最佳答案

使用下面的代码。而不是使用 holder.card_view.setOnClickListener(this);里面onBindViewHolder , 在 ContactViewHolder 中使用它像这样,card_view.setOnClickListener(this);这样您就可以使用 getPosition() 获得位置方法。

public static class ContactViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    TextView person_name, person_email;
    ArrayList<Contact> contacts = new ArrayList<Contact>();
    Context ctx;
    CardView card_view;

    public ContactViewHolder(View view, Context ctx ,ArrayList<Contact> contacts) {
        super(view);
        this.contacts=contacts;
        this.ctx = ctx;
        person_name = (TextView) view.findViewById(R.id.person_name);
        person_email = (TextView) view.findViewById(R.id.person_email);
        card_view =  (CardView) view.findViewById(R.id.card_view);
        card_view.setOnClickListener(this);
    }
 @Override
        public void onClick(View v) 
       {
          Toast.makeText(this.ctx, "position "+getPosition(), Toast.LENGTH_SHORT).show();
         Intent intent = new Intent(this.ctx,task_detail.class);
          this.ctx.startActivity(intent);
       }
}

关于android - 如何在 OnClickListener android 上获取选定的 CardView 位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35478714/

相关文章:

android - 在回收站 View 中的特定位置更新 View

android - MvvmCross:MvxAdapter GetBindableView 方法在第一个 child 上无限循环

java - Recyclerview 忙和崩溃

java - 为什么ListView.setAdapter(null)不会抛出空指针异常?

android - 单击 RecyclerView 中的名称字段时显示刻度线图像?

android - 带有标题和子项的复杂 RecyclerView

java - 通知在特定时间自动取消

java - 使用上下文菜单从 Android 中的 SQLite 数据库中删除

android - FCMPluging 和 GooglePlus 冲突

android - 如何保证我的操作栏选项卡在所有屏幕尺寸下始终可见?