我有活动服务,您点击回收商项目,然后打开带有子服务的ServiceDetailActivity。您可以向单例添加服务,并从该单例中的Basket Activity访问它。问题在于我将服务添加到单身人士并转到篮子,这样就可以了。但是当我回到服务然后再回到ServiceDetailActivity并再次单击我之前选择的子服务时,它应该从Singleton中删除它。但它没有,请帮助我!!!如何解决这个问题?
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();
}
}