Android应用程序中的RecyclerView.ViewHolder问题

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

在我的应用程序中,它显示了我需要在reRecyclerView中显示的必要信息,但是当我尝试删除一个目录时却没有发生。但是它执行删除项目短语,并且该目录仍然存在。我需要从那里删除那些目录。那些数据仍然保留在数据库中并不重要,因为我只想删除目录。有人知道如何解决此问题吗?谢谢

image

这是完整的代码。


package com.example.policeemergencysystem;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;

import com.example.policeemergencysystem.Model.AdminOrders;
import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.firebase.ui.database.FirebaseRecyclerAdapter;

public class AdminCategoryActivity extends AppCompatActivity {

    private RecyclerView ordersList;
    private DatabaseReference ordersRef, adminRef, mapRef;
    private Button backBtn;
    private String userID = "", userNAME = "", userPHONE = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_admin_category);

        userID = getIntent().getStringExtra("uid");
        userNAME = getIntent().getStringExtra("uname");
        userPHONE = getIntent().getStringExtra("uphone");
        ordersRef = FirebaseDatabase.getInstance().getReference().child("Users");
        adminRef = FirebaseDatabase.getInstance().getReference().child("Location");
        ordersList = findViewById(R.id.ordersList);
        ordersList.setLayoutManager(new LinearLayoutManager(this));
    }

    @Override
    protected void onStart()
    {
        super.onStart();
        FirebaseRecyclerOptions<AdminOrders> options =
                new FirebaseRecyclerOptions.Builder<AdminOrders>()
                        .setQuery(ordersRef, AdminOrders.class)
                        .build();

        FirebaseRecyclerAdapter<AdminOrders, AdminOrdersViewHolder> adapter =
                new FirebaseRecyclerAdapter<AdminOrders, AdminOrdersViewHolder>(options) {
                    @Override
                    protected void onBindViewHolder(@NonNull final AdminOrdersViewHolder holder, final int position, final @NonNull AdminOrders model)
                    {
                        holder.userName.setText("Name : "+ model.getName());
                        holder.userPhoneNumber.setText("Phone Number : "+ model.getPhone());
                        holder.viewLocationBtn.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                String uID = getRef(position).getKey();
                                String uNAME = getRef(position).getKey();
                                String uPHONE = getRef(position).getKey();
                                Intent intent = new Intent(AdminCategoryActivity.this, AdminViewMapsActivity.class);
                                intent.putExtra("uid", uID);
                                intent.putExtra("uname", uNAME);
                                intent.putExtra("uphone", uPHONE);
                                startActivity(intent);
                            }
                        });
                        holder.itemView.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View view)
                            {
                                CharSequence options[] = new CharSequence[]
                                        {
                                                "Yes",
                                                "No"
                                        };
                                AlertDialog.Builder builder = new AlertDialog.Builder(AdminCategoryActivity.this);
                                builder.setTitle("Are you done with this case?");
                                builder.setItems(options, new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialogInterface, int i)
                                    {
                                        if(i ==0)
                                        {
                                            String uID = getRef(position).getKey();
                                            RemoveOrder(uID);
                                        }
                                        else
                                        {
                                            finish();
                                        }
                                        adminRef.removeValue()
                                                .addOnCompleteListener(new OnCompleteListener<Void>() {
                                                    @Override
                                                    public void onComplete(@NonNull Task<Void> task)
                                                    {
                                                        if(task.isSuccessful())
                                                        {
                                                            Toast.makeText(AdminCategoryActivity.this, "Item removed", Toast.LENGTH_SHORT).show();
                                                            finish();
                                                            startActivity(getIntent());
                                                        }
                                                    }
                                                });
                                    }
                                });
                                builder.show();
                            }
                        });
                    }

                    @NonNull
                    @Override
                    public AdminOrdersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int i)
                    {
                        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.orders_layout, parent, false);
                        return new AdminOrdersViewHolder(view);
                    }
                };
        ordersList.setAdapter(adapter);
        adapter.startListening();
    }

    public static class AdminOrdersViewHolder extends RecyclerView.ViewHolder
    {
        public TextView userName, userPhoneNumber;
        public Button viewLocationBtn;
        public AdminOrdersViewHolder (View itemView)
        {
            super(itemView);
            userName = itemView.findViewById(R.id.userName);
            userPhoneNumber = itemView.findViewById(R.id.userPhoneNumber);
            viewLocationBtn = itemView.findViewById(R.id.viewLocationBtn);
        }
    }
    private void RemoveOrder(String uID)
    {
        adminRef.child(uID).removeValue();
    }
}

android firebase-realtime-database android-recyclerview firebaseui
1个回答
0
投票
 FirebaseRecyclerAdapter<AdminOrders, AdminOrdersViewHolder> adapter;

在您的onStart()方法中:

adapter =new FirebaseRecyclerAdapter ....

在删除项目后调用notifyItemRemoved(position):

 private void RemoveOrder(String uID)
    {
        adminRef.child(uID).removeValue();

        adpater.notifyItemRemoved(position);
    }

或者如果您有更多更改(例如更新,插入),可以使用

notifyDataSetChanged()

adpater.notifyDataSetChanged()
© www.soinside.com 2019 - 2024. All rights reserved.