2015-12-22 12 views
6

मेरे पास दो गतिविधियां हैं, एक UserActivity है और दूसरा CartActivity है UserActivity में उत्पादों की एक सूची दिखा रहा हूं। एक बटन AddtoCart बटन पर क्लिक करके मैं कार्ट में उत्पादों को जोड़ रहा हूं। मुझे इस समस्या का सामना करना पड़ रहा है:हटाने के बाद बैक बटन दबाकर कार्ट गिनती को अपडेट करना

जब मैं बटन AddtoCart पर क्लिक करता हूं तो एक्शन बार में एक कार्ट आइकन होता है और मेरे पास उस कार्ट आइकन पर कार्ट काउंटर दिखाते हुए textview का कस्टम लेआउट होता है। जब भी मैं AddtoCart बटन पर क्लिक करता हूं तो वह काउंटर अपडेट। अब मैं CartActivity पर जाता हूं और कार्ट से कुछ उत्पादों को हटा देता हूं। जब मैं UserActivity पर वापस लौटने के लिए वापस बटन दबाता हूं, तो काउंटर टेक्स्ट व्यू अपडेट नहीं होता है।

मैंने Back button and refreshing previous activity पर दिए गए प्रश्न के अनुसार वापस दबाने पर अपडेट करने के कुछ तरीकों को पढ़ा है। उत्तर में दी गई दो विधियां OnResume()UserActivity की विधि को ओवरराइड करके या परिणाम के लिए गतिविधि शुरू कर रही हैं।

मुझे लगता है मैं जब मैं वापस जाएं बटन दबाएं UserActivity को CartActivity से एक चर DeleteCounter कहा जाता गुजरती हैं और काउंटर TextView में उत्पादों की मूल संख्या से घटा दें और पाठ दृश्य को अपडेट करने की जरूरत है लगता है।

यहां UserActivity का आंशिक कोड है और मेरे पास इस कोड में केवल कार्ट काउंटर को अपडेट करने का कार्य है जिसे मैं बटन पर क्लिक करता हूं। इसके अलावा onActivityResult() का कोड जिसमें मैंने उपरोक्त दिए गए SO प्रश्न लिंक के उत्तर से कोशिश की थी। यह पता काम नहीं कर रहा:

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

जब मैं कोड है जो दोनों गतिविधियों में बाहर टिप्पणी की है का उपयोग परिणाम विधि के लिए शुरू गतिविधि का उपयोग यानी, ऐसा होता है:

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

यहाँ CartActivity का कोड है : जब मैं हटाएं बटन पर क्लिक करता हूं, तो आइटम हटा दिए जाते हैं लेकिन CartActivity स्वचालित रूप से बंद हो जाता है। काउंटर टेक्स्ट व्यू के साथ UserActivity कार्ट में उत्पाद होने पर भी '0' मान दिखाया गया है।

मुझे कोड से आपको आवश्यक किसी भी अन्य जानकारी के बारे में बताएं। CartActivity में कुछ आइटमों को हटाने के बाद बैक बटन दबाए जाने पर कार्ट काउंटर को अपडेट करने के लिए मैं किसी भी अन्य तरीके का उपयोग कर सकता हूं। किसी भी मदद की सराहना की है।

उत्तर

1

उपयोग

invalidateOptionsMenu(); 

onActivityResult में फिर से मेनू को भरने के लिए।

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

नहीं है, अभी भी काम नहीं:

अपने UserActivity कोड की तरह होना चाहिए। समस्या यह है कि जब मैं डिलीट बटन दबाता हूं, तो चयनित उत्पाद हटा दिए जाते हैं और 'कार्टएक्टिविटी' स्वयं खत्म हो जाती है, भले ही उत्पाद कार्ट में मौजूद हों और 'उपयोगकर्ता एक्टिविटी' कार्ट में शून्य काउंटर के साथ दिखाई दे। जब मैं हटाएं क्लिक करता हूं तो मैं 'UserActivity' को बिल्कुल प्रकट नहीं करना चाहता! यदि मैं गाड़ी की अद्यतन गिनती के साथ दिखाना चाहिए तो उससे पीछे दबाएं। – brainbreaker

+0

अगर कार्टेटिविटी –

+0

में (mcartList.size() == 0) के साथ (deletecounterLize.size() == 0) स्थिति को प्रतिस्थापित करें, तो उपयोगकर्ता एक्टिविटी को हटाया जाता है जब आइटम हटा दिया जाता है जो स्थिति हटाए जाने वाले को संतुष्ट करता है!= 0 और अगर 0 0 या 0 नहीं तो सरणीसूची के आकार की जांच करने के लिए इरादा इतना बेहतर निकाल दिया गया है, तो केवल प्रयोक्ता सक्रियता का इरादा निकाल दिया जाना चाहिए –

संबंधित मुद्दे