Actualización del recuento del carro al presionar el botón de retroceso después de la eliminación

Tengo dos actividades, una es UserActivity y otra es CartActivity Estoy mostrando una lista de productos en UserActivity . En el tecleo de un botón AddtoCart Estoy agregando los productos al carro. Estoy enfrentando este problema:

Cuando agrego chascar el botón AddtoCart hay un icono del carro en la barra de la acción y tengo una disposición de encargo de un textview muestra el contador del carro en ese icono del carro. Ese contador se actualiza cada vez que haga clic en el botón AddtoCart . Ahora paso a CartActivity y CartActivity algunos de los productos del carro. Cuando UserActivity el botón de retroceso ahora para volver a UserActivity , la vista de texto de contador no se actualiza.

He leído sobre algunas maneras de hacer la actualización de presionar de nuevo como se da en la pregunta aquí botón Atrás y actualizar la actividad anterior . Dos métodos dados en la respuesta son sobreponiendo el método OnResume() de UserActivity o iniciando la actividad para el resultado.

Creo que necesito pasar una variable llamada DeleteCounter de CartActivity a la UserActivity cuando UserActivity el botón de la parte posterior y lo resta del número original de productos en el Counter TextView y actualizo la visión del texto.

Aquí está el código parcial de UserActivity y tengo la función de actualizar el contador de carrito en este código sólo que se llama cuando hago clic en un botón. También el código de onActivityResult() en comentado en esto que traté de la respuesta de arriba dado SO enlace de pregunta. No está funcionando:

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

Aquí está el código de CartActivity :

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

Cuando uso el código que se comenta en ambas actividades, es decir, el uso de la actividad de inicio para el método de resultado, esto sucede: Cuando hago clic en el botón de eliminar, los elementos se eliminan, pero el CartActivity cierra automáticamente. La UserActivity con la vista de texto de contador se muestra con el valor '0' incluso cuando hay productos en el carro.

Háblame de cualquier otra información que necesites del código. Cualquier otra forma que pueda implementar para actualizar el contador de carrito al presionar el botón de retroceso después de la eliminación de algunos elementos en CartActivity son bienvenidos. Cualquier ayuda es apreciada.

Utilizar

 invalidateOptionsMenu(); 

onActivityResult para rellenar el menú de nuevo.

Su código de UserActivity debe ser como:

 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){ cartindex=Integer.parseInt(counterTV.getText().toString())-deletecounter ; invalidateOptionsMenu(); } } } } @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)); } } }); } @Override protected void onRestart() { if(CartActivity.cart.size()!=0){ cartindex=CartActivity.cart.size(); invalidateOptionsMenu(); super.onRestart()} 
  • Android: ¿Cuándo usamos getIntent ()?
  • Cómo utilizar el método onActivityResult de otra clase que no sea Activity
  • OnActivityResult devuelve datos nulos para una captura de imagen
  • OnActivityResult () no se llama
  • Cámara Android: archivo vacío en el método onActivityResult
  • Usando onActivityResult en Fragments
  • Identificar en onActivityResult si se seleccionó la imagen de una galería o un video - Android
  • OnActivityResult no se llama
  • fragmentos startActivityForResult devuelven siempre resultCode 0 y el intento null en callback onActivityResult
  • OnActivityResult no se llama después de startIntentSenderForResult
  • Fragmento de Android se está destruyendo pero recibiendo onActivityResult
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.