在 recyclerView 中获取选择的 ID
Get id of a selection in a recyclerView
您好,我已经为这个问题苦苦挣扎了一段时间。我做了一个最喜欢的 imageButton 但是当我调试应用程序时,相同的 id 出现在屏幕上,如果 select 另一个最喜欢的到另一个项目它出现相同的 id.This 应该发生我会告诉你适配器和xml适配器的每一项我都用过
这是我的 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>
还有我的适配器。
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);
}
}
}
这将是关键部分。
String selectedObject = item.getObjectId();
当我调试并单击不同的 imageButtons 时,我得到与图像中所示相同的 ID。
我做错了什么,找不到解决办法,请帮忙!
您的 ParseObject item;
位于适配器范围内。在这种情况下,它将始终具有最新的绑定项目。将此变量移动到 onBindViewHolder
方法中:
ParseObject item = inmobiliList.get(position);
您好,我已经为这个问题苦苦挣扎了一段时间。我做了一个最喜欢的 imageButton 但是当我调试应用程序时,相同的 id 出现在屏幕上,如果 select 另一个最喜欢的到另一个项目它出现相同的 id.This 应该发生我会告诉你适配器和xml适配器的每一项我都用过
这是我的 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>
还有我的适配器。
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);
}
}
}
这将是关键部分。
String selectedObject = item.getObjectId();
当我调试并单击不同的 imageButtons 时,我得到与图像中所示相同的 ID。
我做错了什么,找不到解决办法,请帮忙!
您的 ParseObject item;
位于适配器范围内。在这种情况下,它将始终具有最新的绑定项目。将此变量移动到 onBindViewHolder
方法中:
ParseObject item = inmobiliList.get(position);