6

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.

Antwort

1

Verwenden

invalidateOptionsMenu(); 

in onActivityResult wieder Menü zu füllen.

Ihre UserActivity Code sollte wie:

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

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

+0

Ersetzen if (deletecounter! = 0) Bedingung mit if (mCartList.size() == 0) in CartActivity –

+0

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 –

Verwandte Themen