Java 如何在android中使用recyclerView传递id而不是位置

Java 如何在android中使用recyclerView传递id而不是位置,java,android,android-recyclerview,Java,Android,Android Recyclerview,我在recyclerView单击中有pass position,但有些问题是pass to position显示错误的数据,因此我如何在recyclerView中传递人员id。 我是android编程新手 回收查看项目点击 recyclerView = (RecyclerView) findViewById(R.id.recycler_view); buildCustomAdapter = new BuildCustomAdapter(this, peopleList); Re

我在recyclerView单击中有pass position,但有些问题是pass to position显示错误的数据,因此我如何在recyclerView中传递人员id。
我是android编程新手

回收查看项目点击

 recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
    buildCustomAdapter = new BuildCustomAdapter(this, peopleList);
    RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
    recyclerView.setLayoutManager(mLayoutManager);
    buildCustomAdapter.notifyDataSetChanged();
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setAdapter(buildCustomAdapter);
buildCustomAdapter.setOnItemClickListener(new BuildCustomAdapter.OnItemClickListener() {
    @Override
    public void onItemClick(View view, int position) {
        detailPeople(position);
    }
});

private void detailPeople(int position) {
    Intent intent = new Intent(this, AddDetail.class);
    intent.putExtra("peopleID", position);
    startActivity(intent);
}
模型类

public class People implements Serializable {
    private String peopleImage;
    private String peopleName;
    private String id;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public void setPeopleName(String peopleName) {
        this.peopleName = peopleName;
    }

    public String getPeopleName() {
        return peopleName;
    }

    public void setPeopleImage(String peopleImage) {
        this.peopleImage = peopleImage;
    }

    public String getPeopleImage() {
        return peopleImage;
    }
}
适配器代码

public class BuildCustomAdapter extends RecyclerView.Adapter<BuildCustomAdapter.MyViewHolder> implements Filterable {
private List<People> peopleList;
private List<People> peopleListCopy;
private ItemFilter mFilter = new ItemFilter();
private OnItemClickListener mOnItemClickListener;
private Context mContext;

public BuildCustomAdapter(Context context, List<People> buildList) {
    mContext = context;
    this.peopleList = buildList;
    this.peopleListCopy = new ArrayList<>();
    peopleListCopy.addAll(buildList);
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.build_list_row, parent, false);

    return new MyViewHolder(itemView);
}


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

    People people = peopleList.get(position);

    byte[] decodedString = Base64.decode(people.getPeopleImage(), Base64.DEFAULT);
    Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
    holder.ivPeopleImage.setImageBitmap(decodedByte);
    holder.tvPersonName.setText(people.getPeopleName());

    holder.button.setSelected(people.getStatus() == 1);
    holder.button.setOnClickListener(new onSelectListener(position));

}

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

@Override
public Filter getFilter() {
    if (mFilter == null) {
        mFilter = new ItemFilter();
    }
    return mFilter;
}

public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    public TextView tvPersonName;
    public Button button;
    public CircularImageView ivPeopleImage;


    public MyViewHolder(View itemView) {
        super(itemView);
        mContext = itemView.getContext();
        ivPeopleImage = (CircularImageView) itemView.findViewById(R.id.ivPerson);
        tvPersonName = (TextView) itemView.findViewById(R.id.tvPersonName);
        button = (Button) itemView.findViewById(R.id.addbn);
        tvPersonName.setOnClickListener(this);
        ivPeopleImage.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        if (mOnItemClickListener != null)
            mOnItemClickListener.onItemClick(v, getPosition());
    }
}

public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
    mOnItemClickListener = onItemClickListener;
}

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

}

private class ItemFilter extends Filter {

    protected FilterResults performFiltering(CharSequence constraint) {
        FilterResults results = new FilterResults();
        if (constraint != null && constraint.length() > 0) {
            List<People> filterList = new ArrayList<>();

            for (int i = 0; i < peopleListCopy.size(); i++) {
                if ((peopleListCopy.get(i).getPeopleName().toUpperCase())
                        .contains(constraint.toString().toUpperCase())) {

                    People peopleName = peopleListCopy.get(i);
                    filterList.add(peopleName);
                }
            }
            results.count = filterList.size();
            results.values = filterList;

        } else {
            results.count = peopleListCopy.size();
            results.values = peopleListCopy;
        }
        return results;
    }

    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
        peopleList = (List<People>) results.values;
        notifyDataSetChanged();
    }
}


private class onSelectListener implements View.OnClickListener {

    int mPosition;

    public onSelectListener(int position) {
        mPosition = position;
    }

    @Override
    public void onClick(View view) {
        People people = peopleList.get(mPosition);
        view.setSelected(!view.isSelected());
        people.setStatus(view.isSelected() ? 1 : 0);
        notifyDataSetChanged();
    }
}

从位置获取id

String id=peopleList.get(position).getId();
detailPeople(id);

在方法中传递该id,您就完成了。

使用position从ArrayList获取People对象。使用以下代码更改detailPeople()方法

private void detailPeople(int position) {

Intent intent = new Intent(this, AddDetail.class);
intent.putExtra("peopleID", peopleList.get(position).getId());
startActivity(intent);
}
请更换

@Override
public void onClick(View v) {
    if (mOnItemClickListener != null)
        mOnItemClickListener.onItemClick(v, getPosition());
}

在适配器中。并将方法onItemClick的签名从

onItemClick(View v, int position)

然后用这个来根据身份证找到人

  People peopleDetailsObj=null;
  for(People ple:peopleList)
  {
    if(ple.getId().equals(peopleID)){
  peopleDetailsObj=ple;
     break;
   }}

从何处获取用于在列表视图中显示的数据?使用getTag()进行recycleView,而不是getId()/getPosition()。请发布buildCustomAdapter代码。好的,我将共享a传递我在此行中获取的id peopleDetailsObj=peopleList.get(peopleID);peopleId为0如何解决此问题您必须将peopleDetailsObj=peopleList.get(peopleId)替换为上述代码包bundle=getIntent().getExtras();if(bundle!=null){int-peopleID=bundle.getInt(“peopleID”);peopleList.clear();BuildDataa();People-People=null;for(People:peopleList){if(ple.getId().equals(peopleID)){People=ple;break;}}请将int-peopleID=bundle.getInt(“peopleID”);更改为String-peopleID=bundle.getString(“peopleID”);抱歉,我忘了这是我的错误,boss@brijesh Kumara将clicklistner添加到适配器中。生成根布局id,然后在该布局id上将click listner放入bindview中。它将工作…您可以尝试…我这样使用…仅。。。!!!
    @Override
public void onClick(View v) {
    if (mOnItemClickListener != null)
        mOnItemClickListener.onItemClick(v, peopleList.get(getPosition()).getId());
}
onItemClick(View v, int position)
onItemClick(View v, String id)
  People peopleDetailsObj=null;
  for(People ple:peopleList)
  {
    if(ple.getId().equals(peopleID)){
  peopleDetailsObj=ple;
     break;
   }}