6

私には 2 つの活動がUserActivityありCartActivityますUserActivity。ボタンをクリックAddtoCartすると、商品がカートに追加されます。私はこの問題に直面しています:

ボタンをクリックして追加するAddtoCartと、アクションバーにカートアイコンがtextview表示され、そのカートアイコンにカートカウンターを表示するカスタムレイアウトがあります。ボタンをクリックするたびに、そのカウンターが更新されますAddtoCart。次にCartActivity、カートからいくつかの製品を削除します。今すぐ戻るボタンを押して に戻るとUserActivity、カウンターのテキスト ビューが更新されません。

ここの質問にあるように、戻るボタンを押して更新を行ういくつかの方法について読みましたBack button and refresh previous activityOnResume()回答に示されている2つの方法は、メソッドをオーバーライドするUserActivityか、結果のアクティビティを開始することです。

戻るボタンを押したときにfromDeleteCounterという変数を に渡し、それを Counter の元の製品数から差し引いて、テキスト ビューを更新する必要があると思います。CartActivityUserActivityTextView

これが部分的なコードでUserActivity、ボタンをクリックしたときに呼び出されるこのコードでのみカートカウンターを更新する機能があります。onActivityResult()また、上記のSO質問リンクの回答から試した、これにコメントされたコード。うまくいきません:

    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とおりです。

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

両方のアクティビティでコメントアウトされたコードを使用すると、つまり結果メソッドに開始アクティビティを使用すると、これが発生します。削除ボタンをクリックすると、アイテムは削除されますが、CartActivity自動的に閉じます。カートに商品が入っている場合でも、UserActivityカウンタ付きテキスト ビューが「0」の値で表示されます。

コードから必要なその他の情報について教えてください。いくつかのアイテムを削除した後に戻るボタンを押したときにカートカウンターを更新するために実装できる他の方法CartActivityは大歓迎です。どんな助けでも大歓迎です。

4

1 に答える 1