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.
What i am doing wrong cant find a solution please help!
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);