从列表视图中删除项目,行为奇怪

时间:2020-08-31 04:10:07

标签: java android listview arraylist

我有一个扩展基本适配器的列表视图。每个列表项上都有一个删除按钮。单击删除按钮后,应删除列表项。但是,当我尝试这样做时,listview表现得很奇怪。删除按钮是造成主要问题的原因。有时列表会翻倍,有时应用会崩溃。我试图将删除按钮添加到列表视图的项目。当某人单击该按钮时,该列表项将被删除,并且还将从firebase中删除该项目。

我正在努力实现这一目标。 enter image description here

对不起,我的英语不好。预先感谢您的帮助。

package com.owoshopkeeperpanel.adapters;

import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.DataSetObserver;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.TextView;
import android.widget.Toast;

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

import com.bumptech.glide.Glide;
import com.cepheuen.elegantnumberbutton.view.ElegantNumberButton;
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.owoshopkeeperpanel.Interface.ItemClickListener;
import com.owoshopkeeperpanel.Model.Cart;
import com.owoshopkeeperpanel.Prevalent.Prevalent;
import com.owoshopkeeperpanel.R;

import java.util.ArrayList;

public class CartListAdapter extends BaseAdapter {
    private Context mCtx;
    private ArrayList<Cart> cartList;

    final DatabaseReference cartListRef = FirebaseDatabase.getInstance().getReference().child("Cart List");

    public CartListAdapter(Context mCtx, ArrayList<Cart> cartList) {
        this.mCtx = mCtx;
        this.cartList = cartList;
    }

    @Override
    public int getCount() {
        return cartList.size();
    }

    @Override
    public Object getItem(int position) {
        return cartList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        Cart cart = cartList.get(position);

        if(convertView==null) {
            LayoutInflater layoutInflater = (LayoutInflater) mCtx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = layoutInflater.inflate(R.layout.cart_items_sample, null);

        }
            ImageView delete = convertView.findViewById(R.id.cart_item_delete);
            ImageView cart_product_image = convertView.findViewById(R.id.cart_product_image);
            TextView cart_product_name = convertView.findViewById(R.id.cart_product_name);
            TextView cart_product_quantity = convertView.findViewById(R.id.cart_product_quantity);
            TextView cart_product_price = convertView.findViewById(R.id.cart_product_price);
            ElegantNumberButton cart_item_change_button = convertView.findViewById(R.id.cart_item_change_btn);

            Glide.with(mCtx).load(cart.getProduct_image()).into(cart_product_image);

            cart_product_name.setText(cart.getProduct_name());
            cart_product_quantity.setText(cart.getProduct_price()+" × "+cart.getNeeded_quantity());
            double product_total_price = Double.parseDouble(cart.getProduct_price()) * Double.parseDouble(cart.getNeeded_quantity());
            cart_product_price.setText("৳ "+String.valueOf(product_total_price));
            cart_item_change_button.setNumber(cart.getNeeded_quantity());

            delete.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(mCtx);

                    alertDialogBuilder.setMessage("Are you sure you want to remove this item from cart ?");
                    alertDialogBuilder.setPositiveButton("yes",
                            new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface arg0, int arg1) {
                                    cartListRef.child(Prevalent.currentOnlineUser.getPhone())
                                            .child(String.valueOf(cart.getProduct_id()))
                                            .removeValue().addOnCompleteListener(new OnCompleteListener<Void>() {
                                        @Override
                                        public void onComplete(@NonNull Task<Void> task) {
                                            if(task.isSuccessful())
                                            {
                                                Toast.makeText(mCtx, String.valueOf(cartList.size()), Toast.LENGTH_LONG).show();
                                                cartList.remove(cart);
                                                notifyDataSetChanged();
                                            }
                                        }
                                    });
                                }
                            });

                    alertDialogBuilder.setNegativeButton("No",new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {

                        }
                    });

                    AlertDialog alertDialog = alertDialogBuilder.create();
                    alertDialog.show();
                }
            });
        return convertView;
    }
}

0 个答案:

没有答案