Search code examples
javaandroidparse-platformandroid-recyclerview

Get id of a selection in a recyclerView


Hello ive been struggling with this problem quite a while. i made a favorite imageButton but when i debbug the app the same id comes to screen and if select another favorite into another item it comes up the same id.This should be happening i will show you the adapter and the xml i used in every item of the adapter.

heres my xml.

    <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="3dp"
    android:layout_marginTop="15dp"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="250dp"
        app:cardUseCompatPadding="true"
        app:cardCornerRadius="4dp"
        android:elevation="8dp">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <ImageView
                android:id="@+id/imgCarro"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_alignBottom="@+id/txttitulo"
                android:layout_alignParentStart="true"
                android:layout_alignParentTop="true"
                android:layout_alignParentEnd="true"
                android:layout_marginStart="0dp"
                android:layout_marginTop="0dp"
                android:layout_marginEnd="0dp"
                android:layout_marginBottom="1dp"
                android:adjustViewBounds="true"
                android:scaleType="center"
                android:src="@drawable/side_nav_bar" />

            <View
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@drawable/scrim"/>



            <TextView
                android:id="@+id/txttitulo"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentStart="true"
                android:layout_alignParentEnd="true"
                android:layout_alignParentBottom="true"
                android:layout_gravity="bottom"
                android:layout_marginStart="0dp"
                android:layout_marginEnd="0dp"
                android:layout_marginBottom="-1dp"
                android:maxLines="1"
                android:padding="16dp"
                android:text="Nombre carro"
                android:textColor="@android:color/white" />
            <ImageButton
                android:id="@+id/favorito_item_inventarios"
                android:layout_width="69dp"
                android:layout_height="63dp"
                android:layout_alignParentTop="true"
                android:layout_alignParentEnd="true"
                android:layout_marginLeft="335dp"
                android:layout_marginTop="10dp"
                android:layout_marginEnd="31dp"
                android:background="@android:color/transparent"
                android:elevation="8dp"
                android:scaleType="fitXY"
                android:src="@drawable/heartwhite" />
        </RelativeLayout>

    </android.support.v7.widget.CardView>

</FrameLayout>

And my adapter.

import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.example.mac.mycarapp.Fragment.DetalleInmobiliaria;
import com.example.mac.mycarapp.Modelos.Automoviles;
import com.example.mac.mycarapp.Modelos.Inmobiliaria;
import com.example.mac.mycarapp.R;
import com.example.mac.mycarapp.UI.CarroDetalleActivity;
import com.parse.GetCallback;
import com.parse.GetDataCallback;
import com.parse.ParseException;
import com.parse.ParseFile;
import com.parse.ParseObject;

import java.util.List;

//import static com.example.mac.mycarapp.R.*;

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


    Context context;
    List<ParseObject> inmobiliList;

    ParseObject item;

    public InmobiliariaAdapter(Context context, List<ParseObject> inmobiliList) {
        this.context = context;
        this.inmobiliList = inmobiliList;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_carros, viewGroup, false);


        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull final ViewHolder viewHolder, final int position) {


        item = inmobiliList.get(position);

        viewHolder.nombrePropInmobi.setText(item.getString("NombrePropiedad"));

        ParseFile parseFile = item.getParseFile("imagenPrincipal");
        if (parseFile != null) {
            parseFile.getDataInBackground(new GetDataCallback() {
                @Override
                public void done(byte[] data, ParseException e) {
                    if (e == null) {
                        Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
                        if (bmp != null) {
                            viewHolder.imagen.setImageBitmap(bmp);
                        }
                    }
                }
            });
        }

        viewHolder.heartDrawable.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                viewHolder.heartDrawable.setImageResource(R.drawable.likeseleccion);


                String selectedObject = item.getObjectId();
            }
        });
    }

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

    public class ViewHolder extends RecyclerView.ViewHolder {
        ImageView imagen;
        TextView nombrePropInmobi;
        ImageView heartDrawable;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            imagen = (ImageView) itemView.findViewById(R.id.imgCarro);
            nombrePropInmobi = (TextView) itemView.findViewById(R.id.txttitulo);
            heartDrawable = itemView.findViewById(R.id.favorito_item_inventarios);
        }

    }
}

This would be the key part.

            String selectedObject = item.getObjectId();

When i debugg and click in the different imageButtons i get the same id as shown in the image.

enter image description here

What i am doing wrong cant find a solution please help!


Solution

  • Your ParseObject item; lives in adapter scope. In that case it will always has the latest binded item. Move this variable into onBindViewHolder method:

    ParseObject item = inmobiliList.get(position);