Привет всем У меня есть вопрос, который я не могу понять о том, как мне узнать, какой элемент массива я нажимаю в корзине. Итак, у меня есть корзина с 5 предметов. Каждый элемент - это объект, который содержит (Имя, Фамилия, Цена, Ключ (это ключ объекта в базе данных реального времени Firebase)), и для каждого объекта у меня есть кнопка ImageButton, которую я могу нажать, чтобы удалить этот элемент из корзины. Моя проблема в том, что я не могу понять, как я могу узнать, какой элемент я щелкаю в этот конкретный момент c, потому что, когда я удаляю то же самое, мне нужно передать ему ключ и получить ключ, который я должен знать. позиция элемента в массиве.
Я прилагаю Кодекс, чтобы вы могли лучше понять. Я новичок в 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);
}
}
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)' для ссылки на пустой объект
Поскольку изображение Кнопка создать, когда объекты внутри представления рециркуляции созданы.