2015-12-22 22 views
6

Ho due attività, una è UserActivity e un'altra è CartActivity Sto visualizzando un elenco di prodotti in UserActivity. Con un clic di un pulsante AddtoCart sto aggiungendo i prodotti al carrello. Sto affrontando questo problema:Aggiornamento del conteggio del carrello alla pressione del pulsante Indietro dopo la cancellazione

Quando aggiungo clic sul pulsante AddtoCart c'è un'icona del carrello nella barra delle azioni e ho un layout personalizzato di un textview che mostra il contatore del carrello su quell'icona del carrello. Il contatore si aggiorna ogni volta che clicco sul pulsante AddtoCart. Ora passiamo allo CartActivity ed elimini alcuni dei prodotti dal carrello. Quando si preme il pulsante Indietro per tornare a UserActivity, la vista del testo del contatore non si aggiorna.

Ho letto su alcuni modi di fare l'aggiornamento alla pressione di ritorno come indicato nella domanda qui Back button and refreshing previous activity. Due metodi forniti nella risposta sono ignorando il metodo OnResume() di UserActivity o avviando l'attività per il risultato.

Penso di aver bisogno di passare una variabile chiamata DeleteCounter dal CartActivity alla UserActivity quando si preme il pulsante indietro e sottrarre dal numero originale di prodotti nel contatore TextView e aggiornare la visualizzazione del testo.

Questo è il codice parziale di UserActivity e ho la funzione di aggiornare il contatore del carrello solo in questo codice che viene chiamato quando faccio clic su un pulsante. Anche il codice di onActivityResult() in commento in questo che ho provato dalla risposta di sopra dato SO domanda link. Non sta funzionando fuori:

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

Ecco il codice di 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; 
     } 
    } 

Quando uso il codice che viene commentata in entrambe le attività vale a dire l'uso di inizio attività per il metodo seguito, questo avviene : Quando faccio clic sul pulsante Elimina, gli elementi vengono eliminati ma lo CartActivity si chiude automaticamente. Lo UserActivity con la visualizzazione del testo del contatore viene visualizzato con il valore "0" anche quando ci sono prodotti nel carrello.

Parlami di qualsiasi altra informazione che ti serve dal codice. Qualsiasi altro modo che posso implementare per aggiornare il contatore del carrello premendo il pulsante Indietro dopo la cancellazione di alcuni articoli in CartActivity sono i benvenuti. Qualsiasi aiuto è apprezzato.

risposta

1

Usa

invalidateOptionsMenu(); 

in onActivityResult per popolano di nuovo menu.

il codice UserActivity dovrebbe essere come:

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()} 
+0

No, ancora non funziona. Il problema è quando premo il pulsante Elimina, i prodotti selezionati vengono cancellati e il 'CartActivity' termina da solo, anche quando i prodotti sono ancora lì nel carrello e il' UserActivity' appare con il contatore dello zero nel carrello. Non voglio che 'UserActivity' appaia quando faccio clic su delete! Se premo indietro di quanto dovrebbe apparire con il conteggio aggiornato del carrello. – brainbreaker

+0

sostituire if (deletecounter! = 0) condizione con if (mCartList.size() == 0) in CartActivity –

+0

UserActivity viene chiamato come deletecounter viene incrementato quando viene eliminato l'elemento che soddisfa condizione deletecounter!= 0 e l'intent è sparato quindi è meglio controllare la dimensione dell'arrayylist se 0 o non se 0 allora solo Intent to UserActivity dovrebbe essere licenziato –