删除后按后退按钮更新购物车计数

Updating cart count on pressing of back button after deletion

我有两项活动,一项是 UserActivity,另一项是 CartActivity 我正在显示 UserActivity 中的产品列表。单击按钮 AddtoCart 我将产品添加到购物车。我面临这个问题:

当我添加单击按钮 AddtoCart 时,操作栏中有一个购物车图标,我有一个 textview 的自定义布局,在该购物车图标上显示购物车计数器。每当我单击按钮 AddtoCart 时,该计数器就会更新。现在我转到 CartActivity 并从购物车中删除一些产品。当我现在按后退按钮从 return 到 UserActivity 时,计数器文本视图不会更新。

我已经阅读了一些关于在按下后退时进行更新的方法,如此处的问题 Back button and refreshing previous activity 所示。答案中给出的两种方法是通过覆盖 UserActivityOnResume() 方法或通过启动 activity 获得结果。

我想我需要在按下后退按钮时将一个名为 DeleteCounter 的变量从 CartActivity 传递到 UserActivity 并从计数器中的原始产品数量中减去它TextView 并更新文本视图。

这是 UserActivity 的部分代码,我只有在这段代码中有更新购物车计数器的功能,当我点击一个按钮时调用。 onActivityResult() 的代码也在评论中,我从上面给出的 SO 问题 link 的答案中尝试过。不成功:

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

当我使用在两个活动中被注释掉的代码时,即对结果方法使用 start activity 时,会发生这种情况: 当我点击删除按钮时,项目被删除但 CartActivity 自动关闭。即使购物车中有产品,带有计数器文本视图的 UserActivity 也显示为“0”值。

请告诉我您需要从代码中获得的任何其他信息。欢迎使用在删除 CartActivity 中的某些项目后按下后退按钮更新购物车计数器的任何其他方法。感谢任何帮助。

使用

invalidateOptionsMenu();

onActivityResult 中再次填充菜单。

您的 UserActivity 代码应该是这样的:

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