RecyclerView и его адаптер

Помогите пожалуйста корректно достать позицию элемента списка, который установлен в recyclerView через адаптер. Пытался это сделать разными костыльными способами, но у меня постоянно позиция обнуляется. Пытался брать ее у вьюХолдера и передавать туда, куда надо. От туда приходить ноль. Пытался при добавлении элемента нового считать размер листа и крайнее значение сэтать крайнему объекту в списке. Даже сделал counter, который после добавления объекта в список присваивал этому объекту номер, который соответствовал его позиции в списке. Костыли не сработали. К примеру - есть класс MainActivity и EditContactActivity. Интент для этого установлен в кастомном сликЛиснэре, который вызывается из мэйн активити. И вот, contactBody.getPosition() из мэйн уходит к примеру равное 3, а во втору активити приходит уже 0.

Фрагмент кода mainActivity

DataAdapter.OnContactClickListener onContactClickListener = (contactBody, position) -> {
            intent = new Intent(MainActivity.this, EditContactActivity.class);
            intent.putExtra("edit pool", (Serializable) contactBody);
            Log.i("LOGG", String.valueOf(contactBody.getPosition()));
            startActivityForResult(intent, 2);

        };

        adapter = new DataAdapter(this, contacts, onContactClickListener);
        recyclerView.setAdapter(adapter);

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (resultCode == RESULT_OK && requestCode == 1) {
            cb = (ContactBody) data.getSerializableExtra("add_contact");

            cb.setPosition(counter);
            ++counter;
            contacts.add(cb);
            Log.i("KEY", String.valueOf(cb.getPosition()));
        } else if (resultCode == RESULT_OK && requestCode == 2) {
            if (data.hasExtra("delete pool")) {
                cb = (ContactBody) data.getSerializableExtra("delete pool");
                contacts.remove(cb.getPosition());
                adapter.notifyDataSetChanged();
            } else if (data.hasExtra("edit pool")) {
                cb = (ContactBody) data.getSerializableExtra("edit pool");
                contacts.set(cb.getPosition(), cb);
                adapter.notifyDataSetChanged();
            }
        }
        checkState();
    }

Фрагмент кода DataAdapter

@Override
    public void onBindViewHolder(@NonNull DataAdapter.ViewHolder holder, int position) {
        ContactBody contactBody = contacts.get(position);

        holder.imageView.setImageResource(contactBody.getImage());
        holder.nameView.setText(contactBody.getContactName());
        holder.numberView.setText(contactBody.getEmailOrNumber());

        bind(contacts.get(position), onContactClickListener, holder, position);

    }

    private void bind(ContactBody contact,
                      OnContactClickListener onContactClickListener,
                      @NonNull DataAdapter.ViewHolder holder,
                      int position) {

        holder.layoutParent.setOnClickListener(v -> {
            onContactClickListener.onContactClick(contact, position);
        });
    }

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

    public static class ViewHolder extends RecyclerView.ViewHolder {
        final ImageView imageView;
        final TextView nameView, numberView;
        final ConstraintLayout layoutParent;

        ViewHolder(View view) {
            super(view);
            imageView = view.findViewById(R.id.image);
            nameView = view.findViewById(R.id.name);
            numberView = view.findViewById(R.id.numberOrEmail);
            layoutParent = view.findViewById(R.id.itemBody);
        }

    }

Фрагмент кода ContactBody

private int image;
    private String contactName;
    private String emailOrNumber;
    private int position;

    public ContactBody(int image, String contactName, String emailOrNumber) {
        this.image = image;
        this.contactName = contactName;
        this.emailOrNumber = emailOrNumber;


    }

    private ContactBody(Parcel in) {
        image = in.readInt();
        contactName = in.readString();
        emailOrNumber = in.readString();
    }
    public int getPosition() {
        return position;
    }

    public void setPosition(int position) {
        this.position = position;
    }

Ответы (0 шт):