Ich habe zwei Aktivitäten, eine ist UserActivity
und andere ist CartActivity
Ich zeige eine Produktliste in UserActivity
. Auf Knopfdruck AddtoCart
Ich füge die Produkte dem Warenkorb hinzu. Ich bin mit diesem Problem konfrontiert:Aktualisierung der Warenkorbanzahl beim Drücken der Zurück-Taste nach dem Löschen
Wenn ich hinzufügen, klicken Sie auf die Schaltfläche AddtoCart
gibt es ein Einkaufswagen-Symbol in der Aktionsleiste und ich habe ein benutzerdefiniertes Layout einer textview
zeigt Warenkorb-Zähler auf diesem Warenkorb-Symbol. Dieser Zähler wird aktualisiert, wenn ich auf die Schaltfläche AddtoCart
klicke. Jetzt gehe ich zu der CartActivity
und lösche einige der Produkte aus dem Warenkorb. Wenn ich jetzt zurück drücke, um zu UserActivity
zurückzukehren, wird die Zählertextansicht nicht aktualisiert.
Ich habe über einige Möglichkeiten, die Aktualisierung beim Drücken von hinten zu tun, wie in der Frage hier Back button and refreshing previous activity gegeben. Zwei in der Antwort angegebene Methoden bestehen darin, die OnResume()
-Methode von UserActivity
zu überschreiben oder die Aktivität für das Ergebnis zu starten.
Ich glaube, ich brauche eine Variable DeleteCounter
von CartActivity
zum UserActivity
genannt passieren, wenn ich die Zurück-Taste drücken und subtrahieren sie von der ursprünglichen Anzahl der Produkte in dem Gegen TextView
und die Textansicht aktualisieren.
Hier ist der Teilcode UserActivity
und ich habe die Funktion, Warenkorbzähler in diesem Code nur zu aktualisieren, der aufgerufen wird, wenn ich auf eine Schaltfläche klicke. Auch der Code onActivityResult()
ist in diesem Kommentar kommentiert, den ich aus der Antwort der oben genannten SO Frage Link versucht habe. Es funktioniert nicht aus:
public class UserActivity extends AppCompatActivity{
private int cartindex = 0;
private TextView counterTV = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
// @Override
// protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// if (requestCode == 1) {
//
// if(resultCode == RESULT_OK){
// Intent intent = getIntent();
// Integer deletecounter = intent.getIntExtra("DeleteCounter",0);
// if(deletecounter>0){
// UpdateCartCount(Integer.parseInt(counterTV.getText().toString())-deletecounter);
// }
// }
// }
// }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.user, menu);
final View menu_list = menu.findItem(R.id.action_hawk).getActionView();
counterTV = (TextView) menu_list.findViewById(R.id.cartcounter);
UpdateCartCount(cartindex);
new MyMenuItemStuffListener(menu_hotlist, "Show message") {
@Override
public void onClick(View v) {
Intent intent= new Intent(UserActivity.this,CartActivity.class);
intent.putExtra("ProductTitle",pname);
intent.putExtra("ProductUrl",purl);
intent.putExtra("ProductPrice",pprice);
intent.putExtra("BargainPrice",bargainprice);
UserActivity.this.startActivity(intent);
}
};
return true;
}
//Function to update cart count
public void UpdateCartCount(final int new_number) {
cartindex = new_number;
if (counterTV == null) return;
runOnUiThread(new Runnable() {
@Override
public void run() {
if (new_number == 0)
counterTV.setVisibility(View.INVISIBLE);
else {
counterTV.setVisibility(View.VISIBLE);
counterTV.setText(Integer.toString(new_number));
}
}
});
}
Hier ist der Code von CartActivity
ist:
public class CartActivity extends AppCompatActivity {
private List<Product> mCartList;
private ProductAdapter mProductAdapter;
private static List<Product> cart;
private static Integer deletecounter= 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cart);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mCartList = getCart();
Intent intent = getIntent();
String ProductTitle = intent.getStringExtra("ProductTitle");
String ProductUrl = intent.getStringExtra("ProductUrl");
String ProductPrice = intent.getStringExtra("ProductPrice");
String BargainPrice = intent.getStringExtra("BargainPrice");
Product product = new Product(ProductTitle, ProductUrl, ProductPrice, BargainPrice);
mCartList.add(product);
// Make sure to clear the selections
for (int i = 0; i < mCartList.size(); i++) {
mCartList.get(i).selected = false;
}
// Create the list
final ListView listViewCatalog = (ListView) findViewById(R.id.cart_list_view);
mProductAdapter = new ProductAdapter(mCartList, getLayoutInflater(), true, CartActivity.this);
listViewCatalog.setAdapter(mProductAdapter);
listViewCatalog.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Product selectedProduct = mCartList.get(position);
if (selectedProduct.selected)
selectedProduct.selected = false;
else
selectedProduct.selected = true;
mProductAdapter.notifyDataSetInvalidated();
}
});
FloatingActionButton Delete = (FloatingActionButton) findViewById(R.id.fab);
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Loop through and remove all the products that are selected
// Loop backwards so that the remove works correctly
for (int i = mCartList.size() - 1; i >= 0; i--) {
if (mCartList.get(i).selected) {
mCartList.remove(i);
deletecounter++;
}
}
// THIS IS THE CODE I USED TO RETURN DATA TO PREVIOUS ACTIVITY BUT UserActivity STARTS AUTOMATICALLY AFTER DELETION OF SELECTED PRODUCTS AS SOON AS I CLICK THE DELETE BUTTON EVEN WHEN THERE ARE PRODUCTS IN THE CART.
// if(deletecounter!=0) {
// Intent i = new Intent(HawkActivity.this, UserActivity.class);
// startActivityForResult(i, 1);
// Intent returnIntent = new Intent();
// returnIntent.putExtra("DeleteCounter", deletecounter);
// setResult(RESULT_OK, returnIntent);
// }
mProductAdapter.notifyDataSetChanged();
Snackbar.make(view,"Selected items deleted successfully",Snackbar.LENGTH_SHORT).show();
}
}
);
}
public static List<Product> getCart() {
if(cart == null) {
cart = new Vector<Product>();
}
return cart;
}
}
Wenn ich den Code zu benutzen, die in den beide aus den Aktivitäten kommentiert wird für das Ergebnis Methode Verwendung von Start-Aktivität, dh, dies geschieht : Wenn ich auf die Löschen-Schaltfläche klicke, werden Elemente gelöscht, aber die CartActivity
wird automatisch geschlossen. Die UserActivity
mit der Zählertextansicht wird mit dem Wert '0' angezeigt, auch wenn sich Produkte im Warenkorb befinden.
Erzähl mir von anderen Informationen, die Sie brauchen, aus dem Code. Alle anderen Möglichkeiten, die ich implementieren kann, um den Warenkorb-Zähler beim Drücken der Zurück-Taste nach dem Löschen einiger Artikel in CartActivity
zu aktualisieren, sind willkommen. Jede Hilfe wird geschätzt.
Nein, immer noch nicht funktioniert. Problem ist, wenn ich die Löschtaste drücke, ausgewählte Produkte werden gelöscht und die 'CartActivity' beendet sich selbst dann, wenn Produkte noch im Warenkorb sind und die' UserActivity' mit Nullzähler im Warenkorb erscheint. Ich möchte nicht, dass 'UserActivity' überhaupt angezeigt wird, wenn ich auf Löschen klicke! Wenn ich zurückdrücke, sollte es mit der aktualisierten Zählung des Wagens erscheinen. – brainbreaker
Ersetzen if (deletecounter! = 0) Bedingung mit if (mCartList.size() == 0) in CartActivity –
UserActivity wird aufgerufen, da deletecounter erhöht wird, wenn Element gelöscht wird, die Bedingung deletecounter erfüllen!= 0 und Intent wird ausgelöst, also besser, um die Größe der Arraylist zu prüfen, wenn 0 oder nicht, wenn 0 dann nur Intent to UserActivity ausgelöst werden sollte –