Java 我如何知道我';m单击回收视图-Firebase detele数据

Java 我如何知道我';m单击回收视图-Firebase detele数据,java,android,firebase,firebase-realtime-database,android-recyclerview,Java,Android,Firebase,Firebase Realtime Database,Android Recyclerview,大家好,我有一个问题,我不知道如何知道我在购物车中单击的数组的哪个元素。所以我有一个购物车,里面有5样东西。每个项目都是一个包含(名称、姓氏、价格、密钥(firebase实时数据库中对象的密钥))的对象,对于每个对象,我都有一个ImageButton,可以单击该按钮从购物车中删除该项目。我的问题是,我无法理解我如何知道我在那个特定时刻单击的是什么项目,因为当我删除idem时,我必须传递密钥并获取密钥,我必须知道项目在数组中的位置 我附上代码以便你能更好地理解。我是Android新手,这是我第一次

大家好,我有一个问题,我不知道如何知道我在购物车中单击的数组的哪个元素。所以我有一个购物车,里面有5样东西。每个项目都是一个包含(名称、姓氏、价格、密钥(firebase实时数据库中对象的密钥))的对象,对于每个对象,我都有一个ImageButton,可以单击该按钮从购物车中删除该项目。我的问题是,我无法理解我如何知道我在那个特定时刻单击的是什么项目,因为当我删除idem时,我必须传递密钥并获取密钥,我必须知道项目在数组中的位置

我附上代码以便你能更好地理解。我是Android新手,这是我第一次这么做

事先非常感谢你

代码:

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);
    }
}
用户适配器:

     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());
                }
            });

        }
    }
}
package com.example.ipill;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ImageButton;
导入android.widget.TextView;
导入androidx.annotation.NonNull;
导入androidx.recyclerview.widget.recyclerview;
导入java.util.ArrayList;
公共类UsersAdapter扩展了RecyclerView.Adapter{
私人集市;
公共职位;
私有OnRemoveItemClickListener MLListener;
公共用户适配器(ArrayList cities,OnRemoveItemClickListener){
这个。城市=城市;
this.mListener=侦听器;
}
@非空
@凌驾
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType){
视图v=(视图)布局展开器。从(parent.getContext())。展开(R.layout.list\u layout\u cart,parent,false);
返回新的视图持有者(v);
}
@凌驾
public void onBindViewHolder(@NonNull ViewHolder,final int位置){
最终用户\u get city=cities.get(位置);
holder.name.setText(city.getName());
holder.name.setText(city.getname());
holder.price.setText(Long.toString(city.getPrice());
}
@凌驾
public int getItemCount(){
如果(城市!=null){
返回城市。大小();
}否则{
返回0;
}
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
公众最终意见;
公共最终文本视图名称;
公共最终文本视图姓氏;
公开最终文本视图价格;
公共最终图像按钮移除;
公共视图持有者(视图){
超级(视图);
this.view=视图;
name=view.findviewbyd(R.id.name2);
姓氏=view.findViewById(R.id.names2);
price=view.findviewbyd(R.id.Price2);
removee=view.findviewbyd(R.id.removeFromCart);
removee.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
mListener.onRemoveItemClicked(ViewHolder.this.getAdapterPosition());
}
});
}
}
}
错误: java.lang.NullPointerException:尝试对空对象引用调用接口方法“void com.example.ipill.OnRemoveItemClickListener.onRemoveItemClicked(int)”

因为图像按钮是在创建循环视图中的对象时创建的


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

创建一个接口

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);
    }
}
公共类UsersAdapter扩展了RecyclerView.Adapter{
私人集市;
公共职位;
IItemClick侦听器;
公共用户适配器(ArrayList cities,IItemClick listener){
这个。城市=城市;
this.listener=listener
}
@非空
@凌驾
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType){
视图v=(视图)布局展开器。从(parent.getContext())。展开(R.layout.list\u layout\u cart,parent,false);
返回新的视图持有者(v);
}
@凌驾
public void onBindViewHolder(@NonNull ViewHolder,int位置){
用户获取城市=城市。获取(位置);
holder.name.setText(city.getName());
holder.name.setText(city.getname());
holder.price.setText(Long.toString(city.getPrice());
holder.name.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
onItemClick(city.getKey(),position);
}
}
@凌驾
public int getItemCount(){
如果(城市!=null){
返回城市。大小();
}否则{
返回0;
}
}
公共静态类ViewHolder扩展了RecyclerView.ViewHolder{
公众最终意见;
公共最终文本视图名称;
公共最终文本视图姓氏;
公开最终文本视图价格;
公共视图持有者(视图){
超级(视图);
this.view=视图;
name=view.findviewbyd(R.id.name\u text2);
姓氏=view.findviewbyd(R.id.status_text2);
price=view.findviewbyd(R.id.price2);
}
}

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

创建一个接口

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);
    }
}
公共类UsersAdapter扩展了RecyclerView.Adapter{
私人集市;
公共职位;
IItemClick侦听器;
公共用户适配器(ArrayList cities,IItemClick listener){
这个。城市=城市;
this.listener=listener
}
@非空
@凌驾
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType){
视图v=(视图)布局展开器。从(parent.getContext())。展开(R.layout.list\u layout\u cart,parent,false);
还新