将对象从一个recyclerview移动到另一个recyclerview

mznpcxlj  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(468)

我目前正在为一些足球场制作一个预订应用程序。我有两个回收者视图:活动预订和取消预订。我还有一个自定义的回收器视图适配器。两个回收器视图使用相同的适配器。
我想做的是:如果我点击我的活动预订回收器视图中的按钮,我想从活动预订中删除预订并将其放入我的取消预订中。我将留下我的自定义适配器,并提到我使用firebase以获得我的预订状态(活动或取消)。

  1. public class RecyclerViewAdapterRezervare extends RecyclerView.Adapter<RecyclerViewAdapterRezervare.RecycleViewHolder> {
  2. private List<Rezervare> rezervari;
  3. private Context context;
  4. private LayoutInflater inflater;
  5. private String numeUtilizator;
  6. private String status;
  7. private Rezervare rezervare = new Rezervare();
  8. private DatabaseReference reff;
  9. public RecyclerViewAdapterRezervare(List<Rezervare> rezervari, Context context, String numeUtilizator) {
  10. this.rezervari = rezervari;
  11. this.context = context;
  12. this.numeUtilizator = numeUtilizator;
  13. this.inflater = LayoutInflater.from(context);
  14. }
  15. @NonNull
  16. @Override
  17. public RecycleViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
  18. View view = inflater.inflate(R.layout.rezervari_layout, parent, false);
  19. return new RecycleViewHolder(view);
  20. }
  21. @Override
  22. public void onBindViewHolder(@NonNull RecycleViewHolder holder, int position) {
  23. rezervare = rezervari.get(position);
  24. reff = FirebaseDatabase.getInstance().getReference();
  25. List<String> listaOre = rezervare.getOre();
  26. Map<String, Object> mapOre = new HashMap<>();
  27. for(String ora : listaOre){
  28. mapOre.put(ora, false);
  29. }
  30. // this will return the status ("activa" is the booking is active, or "anulata" is it's cancelled)
  31. getStatus(rezervare, new StatusCallback() {
  32. @Override
  33. public void onCallback(String value) {
  34. status = value;
  35. holder.btn_anuleaza.setOnClickListener(new View.OnClickListener() {
  36. @Override
  37. public void onClick(View view) {
  38. Log.v("status", status);
  39. new AlertDialog.Builder(view.getContext()).setTitle("Anulare rezervare").setMessage("Sunteti sigur ca doriti anularea rezervarii?")
  40. .setPositiveButton(R.string.da, new DialogInterface.OnClickListener() {
  41. @Override
  42. public void onClick(DialogInterface dialogInterface, int i) {
  43. // if the cancel button is clicked, i update my database so the status of the booking will be "anulata" - cancelled reff.child("Users").child(numeUtilizator).child("rezervari").child(rezervare.getData()).child(rezervare.getNumeTeren()).child("status").setValue("anulata");
  44. reff.child("Rezervari").child(rezervare.getData()).child("Fotbal").child(rezervare.getNumeTeren()).updateChildren(mapOre);
  45. rezervare.setEsteAnulata(false);
  46. Toast.makeText(view.getContext(), "Anulare cu succes!", Toast.LENGTH_LONG).show();
  47. }
  48. }).setNegativeButton(R.string.nu, null).show();
  49. }
  50. });
  51. }
  52. });
  53. }
  54. @Override
  55. public int getItemCount() {
  56. return rezervari.size();
  57. }
  58. // i have updated my code with the delete and insert a booking
  59. public void stergeRezervare(int position){
  60. rezervari.remove(position);
  61. notifyDataSetChanged();
  62. }
  63. public void adaugaRezervare(Rezervare rezervare){
  64. rezervari.add(rezervare);
  65. notifyDataSetChanged();
  66. }

这是从firebase获取预订信息的功能。我有3个单独的列表,分别用于活动预订、取消预订和过去预订。

  1. public interface RezervariListCallback {
  2. void onCallback(List<Rezervare> rezervariActuale, List<Rezervare> rezervariTrecute, List<Rezervare> rezervariAnulate);
  3. }
  4. public void getRezervari(String nume, RezervariListCallback myCallback){
  5. reff.child("Users").child(nume).child("rezervari").addListenerForSingleValueEvent(new ValueEventListener() {
  6. @Override
  7. public void onDataChange(@NonNull DataSnapshot snapshot) {
  8. for(DataSnapshot data : snapshot.getChildren()){
  9. String dataRezervare = data.getKey();
  10. dateRezervari.add(dataRezervare);
  11. reff.child("Users").child(nume).child("rezervari").child(dataRezervare).addListenerForSingleValueEvent(new ValueEventListener() {
  12. @Override
  13. public void onDataChange(@NonNull DataSnapshot snapshot) {
  14. for(DataSnapshot data : snapshot.getChildren()){
  15. String numeTeren = data.getKey();
  16. reff.child("Users").child(nume).child("rezervari").child(dataRezervare).child(numeTeren).child("ore").addValueEventListener(new ValueEventListener() {
  17. @Override
  18. public void onDataChange(@NonNull DataSnapshot snapshot) {
  19. List<String> ore = new ArrayList<>();
  20. for(DataSnapshot data : snapshot.getChildren()){
  21. String ora = data.getKey();
  22. ore.add(ora);
  23. }
  24. getAdresa(nume, dataRezervare, numeTeren, new AdresaCallback() {
  25. @Override
  26. public void onCallbackAdresa(String value) {
  27. Rezervare rezervare = new Rezervare(numeTeren, ore, dataRezervare, value);
  28. String dataAzi = getDataAzi();
  29. reff.child("Users").child(nume).child("rezervari").child(dataRezervare).child(numeTeren).child("status").addValueEventListener(new ValueEventListener() {
  30. @Override
  31. public void onDataChange(@NonNull DataSnapshot snapshot) {
  32. String status = (String) snapshot.getValue();
  33. if(comparaData(dataAzi, rezervare.getData())){
  34. if(status.equals("activa")){
  35. rezervariActive.add(rezervare);
  36. } else {
  37. rezervariAnulate.add(rezervare);
  38. }
  39. } else {
  40. rezervariTrecute.add(rezervare);
  41. }
  42. myCallback.onCallback(rezervariActive, rezervariTrecute, rezervariAnulate);
  43. }
  44. @Override
  45. public void onCancelled(@NonNull DatabaseError error) {
  46. }
  47. });
  48. }
  49. });
  50. }
  51. @Override
  52. public void onCancelled(@NonNull DatabaseError error) {
  53. }
  54. });
  55. }
  56. }
  57. @Override
  58. public void onCancelled(@NonNull DatabaseError error) {
  59. }
  60. });
  61. }
  62. }
  63. @Override
  64. public void onCancelled(@NonNull DatabaseError error) {
  65. }
  66. });
  67. }

这就是我设置适配器的地方

  1. public void updateRezervari(View view, RecyclerView activeBookingsRecycler, RecyclerView pastBookingsRecycler, RecyclerView cancelledBookingsRecycler){
  2. AsyncTask.execute(new Runnable() {
  3. @Override
  4. public void run() {
  5. getRezervari(numeUtilizator, new RezervariListCallback() {
  6. @Override
  7. public void onCallback(List<Rezervare> rezervariActuale, List<Rezervare> rezervariTrecute, List<Rezervare> rezervariAnulate) {
  8. if(rezervariActuale.size()>0){
  9. tvFaraRezervariActive.setEnabled(false);
  10. tvFaraRezervariAnulate.setEnabled(false);
  11. tvFaraRezervariTrecute.setEnabled(false);
  12. }
  13. Log.v("rezAc", rezervariActuale.toString());
  14. Log.v("rezTr", rezervariTrecute.toString());
  15. RecyclerViewAdapterRezervare adapter = new RecyclerViewAdapterRezervare(rezervariActuale, view.getContext(), numeUtilizator);
  16. activeBookingsRecycler.setAdapter(adapter);
  17. adapter = new RecyclerViewAdapterRezervare(rezervariTrecute, view.getContext(), numeUtilizator);
  18. pastBookingsRecycler.setAdapter(adapter);
  19. adapter = new RecyclerViewAdapterRezervare(rezervariAnulate, view.getContext(), numeUtilizator);
  20. cancelledBookingsRecycler.setAdapter(adapter);
  21. }
  22. });
  23. }
  24. });
  25. }

你能给我一些关于如何从一个回收者的观点转移到另一个的建议吗?非常感谢。

5lhxktic

5lhxktic1#

由于您正在使用firebase获取预订的状态,您可以在firebase数据库中将状态更新为取消,然后您将从firebase侦听器获得一个回调,您可以在其中更新ArrayList并调用notifydatasetchanged()。

相关问题