你好,我在this.recycler项目上有很多问题...
对我来说,管理收藏夹项目中的点击非常困难,因为我必须管理适配器的点击。
这是我的主班..
public class CarroNuevoFragment extends Fragment {
private LinearLayoutManager layoutManager;
RecyclerView recyclerView;
public CarroNuevoFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_carro_nuevo, container, false);
recyclerView = view.findViewById(R.id.recyclerview);
layoutManager=new GridLayoutManager(getContext(),2);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(layoutManager);
final List<Automoviles> allItems = new ArrayList<Automoviles>();
ParseQuery<ParseObject> query = ParseQuery.getQuery("Automoviles");
query.whereEqualTo("esNuevo", true);
query.include("Marca");
query.include("Referencia");
query.include("Sucursal");
query.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> carroList, ParseException e) {
if (e == null) {
Log.d("score", "Retrieved " + carroList.size() + " scores");
for (ParseObject carros : carroList) {
ParseFile file = carros.getParseFile("Imagen");
ParseObject marca = carros.getParseObject("Marca");
ParseObject ref = carros.getParseObject("Referencia");
ParseObject sucursal = carros.getParseObject("Sucursal");
if(file !=null){
allItems.add(new Automoviles(
carros.getObjectId(),
marca.getString("Nombre"),
carros.getString("Placa"),
ref.getString("NombreRef"),
carros.getString("Color"),
carros.getBoolean("Transmicion"),
carros.getParseFile("Imagen").getUrl(),
carros.getInt("Modelo"),
carros.getInt("Precio"),
carros.getString("Chasis"),
carros.getInt("Kilometraje"),
carros.getString("Motor"),
carros.getInt("Year"),
sucursal.getString("Nombre"),
carros.getBoolean("esNuevo"),
carros.getString("isFavorite")));
}else {
allItems.add(new Automoviles(
carros.getObjectId(),
marca.getString("Nombre"),
carros.getString("Placa"),
ref.getString("NombreRef"),
carros.getString("Color"),
carros.getBoolean("Transmicion"),
Config.resourceImage,
carros.getInt("Modelo"),
carros.getInt("Precio"),
carros.getString("Chasis"),
carros.getInt("Kilometraje"),
carros.getString("Motor"),
carros.getInt("Year"),
sucursal.getString("Nombre"),
carros.getBoolean("esNuevo"),
carros.getString("isFavorite")
)
);
}
}
CarrosViewAdapter adapter = new CarrosViewAdapter(getContext(),allItems);
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
} else {
Log.d("score", "Error: " + e.getMessage());
}
}
});
return view;
}
}
这是我的适配器...
public class CarrosViewAdapter extends RecyclerView.Adapter<RecyclerViewHolder> {
private List<Automoviles> automovilesList;
private Context context;
ParseObject entity = new ParseObject("Automoviles");
private AdapterView.OnItemClickListener onItemClickListener;
public CarrosViewAdapter(Context context, List<Automoviles> itemList) {
this.automovilesList = itemList;
this.context = context;
}
public void setOnItemClickListener(AdapterView.OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
@NonNull
@Override
public RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_carros, null);
RecyclerViewHolder rcv = new RecyclerViewHolder(view);
return rcv;
}
@Override
public void onBindViewHolder(@NonNull RecyclerViewHolder holder, final int position) {
holder.txtTitulo.setText(automovilesList.get(position).getMarca());
Glide.with(context)
.load(automovilesList.get(position).getImagen())
.into(holder.imgCarro);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Automoviles model = automovilesList.get(position);
Intent intent = new Intent(context, CarroDetalleActivity.class);
intent.putExtra("ListaVehiculos", model);
context.startActivity(intent);
}
});
String isFavorite = automovilesList.get(position).getIsFavorite();
if (isFavorite.equals("true")) {
holder.imagenFavorito.setImageResource(R.drawable.ic_favorite);
} else {
holder.imagenFavorito.setImageResource(R.drawable.ic_favorite_border);
}
holder.imagenFavorito.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String isFavorite = automovilesList.get(position).getIsFavorite();
String objectID = automovilesList.get(position).getObjectId();
if (isFavorite.equals("false")) {
ParseQuery<ParseObject> query = ParseQuery.getQuery("Automoviles");
query.getInBackground(objectID, new GetCallback<ParseObject>() {
@Override
public void done(ParseObject object, ParseException e) {
object.put("isFavorite", "true");
holder.imagenFavorito.setImageResource(R.drawable.ic_favorite);
notifyDataSetChanged();
object.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if (e == null) {
Toast.makeText(context, "Favorito guardado", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(context, "No guardo" + " " + e, Toast.LENGTH_LONG).show();
}
}
});
}
});
} else {
ParseQuery<ParseObject> query = ParseQuery.getQuery("Automoviles");
query.getInBackground(objectID, new GetCallback<ParseObject>() {
@Override
public void done(ParseObject object, ParseException e) {
object.put("isFavorite", "false");
holder.imagenFavorito.setImageResource(R.drawable.ic_favorite_border);
object.saveEventually(new SaveCallback() {
@Override
public void done(ParseException e) {
if (e == null) {
}
}
});
}
});
holder.imagenFavorito.setImageResource(R.drawable.ic_favorite_border);
}
}
});
}
@Override
public int getItemCount() {
return this.automovilesList.size();
}
}
这是我的Viewholder类...
class RecyclerViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
ImageView imgCarro;
TextView txtTitulo;
ImageView imagenFavorito;
private AdapterView.OnItemClickListener itemClickListener;
public RecyclerViewHolder(@NonNull View itemView) {
super(itemView);
imgCarro = itemView.findViewById(R.id.imgCarro);
txtTitulo = itemView.findViewById(R.id.txttitulo);
imagenFavorito=itemView.findViewById(R.id.favorito_item_inventarios);
itemView.setOnClickListener(this);
}
public interface OnItemClickListener {
void onItemClick(View view, ViewModel viewModel);
}
@Override
public void onClick(View v) {
}
}
我正在使用Back4app作为服务器,并且我的数据列为isFavorite包含正确地实现的字符串true或false。当我单击收藏夹时,它会变成红色,但是当我再次单击它时,因为适配器已在运行,所以我没有想到。有人可能会说要通知适配器,但是在适配器类中的什么位置。或者,如果答案是另一个,请给出一个很好的答案! 。
您已在适配器的notifyDataSetChanged();
的if
块中使用onClickListener
方法。但是您尚未将其放在else块中。尝试将notifyDataSetChanged();
放在onClickListener
的最后一行
在您的查看者中进行这些更改-