I have a ServiceActivity with RecyclerView and ServiceDetailActivity with all child services of the selected service. I can add a child service to a singleton and access it in a basque. But when I come back from the back again to this service in order to remove this service from the singleton, it is not deleted. What is it for?
public class ServiceDetailActivity extends BaseActivity implements ServiceDetailItemClickListener.ServiceDetailClickListener { private static final String TAG = "ServiceDetailActivity"; RecyclerView serviceView; ArrayList<Service> servicesList; TextView priceText; int priceSum = 0; int durationSum = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_service_detail); activateToolbar(true); priceText = (TextView) findViewById(R.id.priceSumText); if (Order.getInstance().getPriceSum() == 0) { Order.getInstance().setPriceSum(priceSum); priceText.setText("Итого: 0 тг."); } else { priceSum = Order.getInstance().getPriceSum(); priceText.setText("Итого: " + Order.getInstance().getPriceSum() + "тг."); } Intent intent = getIntent(); final String serviceName = intent.getStringExtra("serviceName"); DatabaseReference mReference = FirebaseDatabase.getInstance().getReference().child("service").child(serviceName); Query query = mReference.orderByChild("priority"); serviceView = (RecyclerView) findViewById(R.id.serviceDetailRecyclerView); serviceView.setHasFixedSize(false); serviceView.setLayoutManager(new LinearLayoutManager(this)); servicesList = new ArrayList<>(); final FirebaseRecyclerAdapter<Service, ServiceHolder> adapter = new FirebaseRecyclerAdapter<Service, ServiceHolder>(Service.class, R.layout.browse_service_detail, ServiceHolder.class, query) { @Override protected void populateViewHolder(ServiceHolder serviceHolder, Service service, int position) { serviceHolder.setServiceName(service.getName()); serviceHolder.setInfo("От " + service.getPrice1()); service.setQuantitySelected(service.getQuantityEnabled()); if (Order.getInstance().getPriceSum() == 0) { Order.getInstance().setPriceSum(priceSum); priceText.setText("Итого: 0 тг."); } else { priceSum = Order.getInstance().getPriceSum(); priceText.setText("Итого: " + Order.getInstance().getPriceSum() + "тг."); } if (Order.getInstance().getDurationSum() == 0) { Order.getInstance().setDurationSum(durationSum); } else { durationSum = Order.getInstance().getDurationSum(); } int duration = service.getDuration(); if (duration >= 24) { serviceHolder.setInfo("От " + service.getPrice1() + ", Срок " + duration/24 + " дн. \n"); serviceHolder.appendInfo(Order.getInstance().getCar().getCarInfo()); } else { serviceHolder.setInfo("От " + service.getPrice1() + ", Срок " + service.getDuration() + "ч.\n"); serviceHolder.appendInfo("" + Order.getInstance().getCar().getCarInfo()); if (Order.getInstance().getServices() != null) { for (int i = 0; i < Order.getInstance().getServices().size(); i++) { if (serviceHolder.getServiceName().getText().toString().equalsIgnoreCase(Order.getInstance().getServices().get(i).getName())) { serviceHolder.getServiceName().setSelected(true); serviceHolder.getServiceName().setTextColor(getResources().getColor(R.color.yellow)); } } } } } }; mReference.addChildEventListener(new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { servicesList.add(dataSnapshot.getValue(Service.class)); } @Override public void onChildChanged(DataSnapshot dataSnapshot, String s) { } @Override public void onChildRemoved(DataSnapshot dataSnapshot) { } @Override public void onChildMoved(DataSnapshot dataSnapshot, String s) { } @Override public void onCancelled(DatabaseError databaseError) { } }); serviceView.setAdapter(adapter); serviceView.addOnItemTouchListener(new ServiceDetailItemClickListener(this, serviceView, this)); } public static class ServiceHolder extends RecyclerView.ViewHolder { TextView serviceName; TextView info; public ServiceHolder(View view){ super(view); serviceName = (TextView) view.findViewById(R.id.serviceDetailTextView); info = (TextView) view.findViewById(R.id.infoTextView); } public void setServiceName(String serviceName) { this.serviceName.setText(serviceName); } public void setInfo(String info) { this.info.setText(info); } public void appendInfo(String text) { this.info.append(text); } public TextView getServiceName() { return serviceName; } } @Override public void onItemClick(View view, int position) { Resources r = getResources(); TextView name = (TextView) view.findViewById(R.id.serviceDetailTextView); if ( !(name.isSelected())) { name.setTextColor(r.getColor(R.color.yellow)); name.setSelected(true); for (Service s: servicesList) { if (name.getText().toString().equals(s.getName())) { Service.getInstance().getServices().add(s); Order.getInstance().setServices(Service.getInstance().getServices()); priceSum += s.getPrice1(); Order.getInstance().setPriceSum(priceSum); priceText.setText("Итого: " + Order.getInstance().getPriceSum() + "тг."); Log.d(TAG, "onItemClick: Order services " + Order.getInstance().getServices()); } } } else { name.setTextColor(r.getColor(android.R.color.white)); name.setSelected(false); for (Service s : servicesList) { if (s.getName().equals(name.getText().toString())) { Service.getInstance().getServices().remove(s); Log.d(TAG, "onItemClick: Service singleton " + Service.getInstance().getServices()); Order.getInstance().setServices(Service.getInstance().getServices()); priceSum -= s.getPrice1(); Order.getInstance().setPriceSum(priceSum); priceText.setText("Итого: " + Order.getInstance().getPriceSum() + "тг."); Log.d(TAG, "onItemClick: Order services after remove " + Order.getInstance().getServices()); } } } } @Override public void onLongItemClick(View view, int position) { TextView name = (TextView) view.findViewById(R.id.serviceDetailTextView); for (Service s: servicesList) { if (name.getText().toString().equalsIgnoreCase(s.getName())) { if (s.getName().equals("empty")) { Toast.makeText(ServiceDetailActivity.this, "Empty detail info", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(ServiceDetailActivity.this, s.getDetailInfo(), Toast.LENGTH_LONG).show(); } } } } @Override protected void onResume() { super.onResume(); Order.getInstance(); Service.getInstance(); } }
Contextin static fields. Here is an excellent answer, which describes how to interact between the service and the activation of stackoverflow.com/questions/20594936/… - Vladimir Parfenov