recyclerview中的收藏夹按钮,没有内部数据存储,没有firebase或解析方法,请在适配器中单击

问题描述 投票:0回答:2

你好,我在this.recycler项目上有很多问题...

enter image description here

对我来说,管理收藏夹项目中的点击非常困难,因为我必须管理适配器的点击。

这是我的主班..

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。当我单击收藏夹时,它会变成红色,但是当我再次单击它时,因为适配器已在运行,所以我没有想到。有人可能会说要通知适配器,但是在适配器类中的什么位置。或者,如果答案是另一个,请给出一个很好的答案! 。

android database adapter
2个回答
0
投票

您已在适配器的notifyDataSetChanged();if块中使用onClickListener方法。但是您尚未将其放在else块中。尝试将notifyDataSetChanged();放在onClickListener的最后一行


0
投票

在您的查看者中进行这些更改-

© www.soinside.com 2019 - 2024. All rights reserved.