我怎么知道我点击了什么回收视图 - Firebase 删除数据 [英] How do I know what I'm clicking Recycle View - Firebase detele data

查看:27
本文介绍了我怎么知道我点击了什么回收视图 - Firebase 删除数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,我有一个问题,我不知道如何知道我在购物车中单击的数组元素.所以我有一个装有 5 件商品的购物车.每个项目都是一个包含(姓名、姓氏、价格、键(是 firebase 实时数据库中对象的键))的对象,对于每个对象,我都有一个 ImageButton,我可以单击它从购物车中删除该项目.我的问题是我不明白我如何知道我在那个特定时刻点击了什么项目,因为当我删除同一个项目时,我必须将密钥传递给它并获取密钥,我必须知道项目在其中的位置数组.

Hi everyone I have a question that I can't figure out about how do I know what element of the array I'm clicking in the shopping cart. So I have a shopping cart with 5 items. Each item is an object that contains (Name, Surname, Price, Key(is the key of the object inside the firebase realtime database)) and for each object, I have an ImageButton that I can click to remove that item from the cart. My problem is that I can't understand how I can know what item I'm clicking in that specific moment, because when I delete the idem I have to pass it the key and to get the key I have to know the item position in the array.

我附上了代码以便您更好地理解.我是 Android 新手,这是我第一次这样做.

I'm attaching the Code so you can understand better. I'm new to Android and it's the first time that I'm doing this.

在此先感谢您.

代码:

public class CartActivity extends AppCompatActivity implements  OnRemoveItemClickListener{

    private TextView total;
    private ImageButton removeFromCart;
    private Button pay;
    private RecyclerView mResultList2;
    private DatabaseReference mUserDatabase;
    int i=0;
    int Totalprice=0;
    OnRemoveItemClickListener item;
    private RecyclerView.Adapter adapter;
    private ArrayList<Users_get> array_data = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cart);
        mUserDatabase = FirebaseDatabase.getInstance().getReference("Cart");

        total          = findViewById(R.id.TotalPrice);
        removeFromCart = findViewById(R.id.removeFromCart);
        mResultList2    = findViewById(R.id.cartList);
        pay            = findViewById(R.id.pay);

        mResultList2.setHasFixedSize(true);
        mResultList2.setLayoutManager(new LinearLayoutManager(this));


        // Attach a listener to read the data at our posts reference
        mUserDatabase.addValueEventListener(new ValueEventListener() {


            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for(DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
                    Users_get post = childSnapshot.getValue(Users_get.class);
                    array_data.add(new Users_get(post.getName(),post.getSurname(),post.getPrice(),childSnapshot.getKey()));
                    getTotalPrice(post.getPrice());
                    adapter = new UsersAdapter(array_data,item);
                    mResultList2.setAdapter(adapter);
                }
            }



            @Override
            public void onCancelled(DatabaseError databaseError) {
                System.out.println("The read failed: " + databaseError.getCode());
            }

        });

    }

    public int getTotalPrice(Long price){
        if (array_data != null) {

                Totalprice+=price;

        }System.out.println("total Price is :"+Totalprice);
        return Totalprice;
    }


    @Override
    public void onRemoveItemClicked(final int position) {
        removeFromCart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                FirebaseDatabase.getInstance().getReference("Cart").child(array_data.get(position).getKey()).removeValue();
            }
        });
        adapter.notifyItemRemoved(position);
    }
}

JSON 文件:

    {
  "Cart" : {
    "-M0U3UXq2ZA00Jq5o9as" : {
      "name" : "Alex",
      "price" : 120,
      "surname" : "Kyto"
    },
    "-M0WlUbQHj1hdH40uWVF" : {
      "name" : "Alex",
      "price" : 120,
      "surname" : "Kyto"
    },
    "-M0WxZhI98Xb1s9Xy5HV" : {
      "name" : "Alex",
      "price" : 120,
      "surname" : "Kyto"
    },
    "-M0X00Zr64RocyQHhoFB" : {
      "name" : "Alex",
      "price" : 120,
      "surname" : "Kyto"
    }
  },
  "Users" : {
    "01" : {
      "Name" : "Alex",
      "Price" : 120,
      "Surname" : "Kyto"
    },
    "02" : {
      "Name" : "Alex",
      "Price" : 200,
      "Surname" : "Pablo"
    }
  }
}

用户适配器:

     package com.example.ipill;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;


public class UsersAdapter extends RecyclerView.Adapter<UsersAdapter.ViewHolder> {

    private ArrayList<Users_get> cities;
    public int position;
    private OnRemoveItemClickListener mListener;
    public UsersAdapter(ArrayList<Users_get> cities,OnRemoveItemClickListener listener) {
        this.cities = cities;
        this.mListener = listener;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = (View) LayoutInflater.from(parent.getContext()).inflate(R.layout.list_layout_cart, parent, false);
        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
        final Users_get city = cities.get(position);
        holder.name.setText(city.getName());
        holder.surname.setText(city.getSurname());
        holder.price.setText(Long.toString(city.getPrice()));

    }

    @Override
    public int getItemCount() {
        if (cities != null) {
            return cities.size();
        } else {
            return 0;
        }
    }

    public  class ViewHolder extends RecyclerView.ViewHolder {
        public final View view;
        public final TextView name;
        public final TextView surname;
        public final TextView price;
        public final ImageButton removee;


        public ViewHolder(View view) {
            super(view);
            this.view = view;
            name = view.findViewById(R.id.name2);
            surname = view.findViewById(R.id.Surname2);
            price = view.findViewById(R.id.Price2);
            removee = view.findViewById(R.id.removeFromCart);

            removee.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mListener.onRemoveItemClicked(ViewHolder.this.getAdapterPosition());
                }
            });

        }
    }
}

错误:java.lang.NullPointerException:尝试在空对象引用上调用接口方法void com.example.ipill.OnRemoveItemClickListener.onRemoveItemClicked(int)"

Error : java.lang.NullPointerException: Attempt to invoke interface method 'void com.example.ipill.OnRemoveItemClickListener.onRemoveItemClicked(int)' on a null object reference

因为在创建回收视图内的对象时创建了图像按钮.

Since the Image button is create when the objects inside the recycle view are created.

推荐答案

我已经更改了所需的东西,就像将侦听器从活动传递到适配器然后从适配器回调一样,

I have changed the required thing, like passing listener from activity to adapter then callback from adapter,

创建1个接口,

public IItemClick{
 public void onItemClick (String key, int position)
}

活动类

public class CartActivity extends AppCompatActivity implements IItemClick {

     // change  
    public void onDataChange(DataSnapshot dataSnapshot) {
                for(DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
                    Users_get post = childSnapshot.getValue(Users_get.class);
                    array_data.add(new Users_get(post.getName(),post.getSurname(),post.getPrice(),childSnapshot.getKey()));
                    adapter = new UsersAdapter(array_data, this);
                    mResultList2.setAdapter(adapter);
                }
            }


                override public void onItemClick(String key, int position){
                 // perform your delete operation from firebase here
                 // after delete  
                adapter.notifyItemRemoved(position)
                }

        }

适配器代码

public class UsersAdapter extends RecyclerView.Adapter<UsersAdapter.ViewHolder> {

    private ArrayList<Users_get> cities;
    public int position;
    IItemClick listener;
    public UsersAdapter(ArrayList<Users_get> cities,IItemClick listener ) {
        this.cities = cities;
        this.listener = listener
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = (View) LayoutInflater.from(parent.getContext()).inflate(R.layout.list_layout_cart, parent, false);
        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        Users_get city = cities.get(position);
        holder.name.setText(city.getName());
        holder.surname.setText(city.getSurname());
        holder.price.setText(Long.toString(city.getPrice()));
        holder.name.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){
         listener.onItemClick(city.getKey(), position);
        }

    }

    @Override
    public int getItemCount() {
        if (cities != null) {
            return cities.size();
        } else {
            return 0;
        }
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {
        public final View view;
        public final TextView name;
        public final TextView surname;
        public final TextView price;


        public ViewHolder(View view) {
            super(view);
            this.view = view;
            name = view.findViewById(R.id.name_text2);
            surname = view.findViewById(R.id.status_text2);
            price = view.findViewById(R.id.price2);
    }
}

这篇关于我怎么知道我点击了什么回收视图 - Firebase 删除数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆