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

时间:2015-12-22 09:01:02

标签: java android cart onactivityresult startactivityforresult

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

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

我已经阅读了有关按下后退更新的几种方法,如Back button and refreshing previous activity中的问题所示。答案中给出的两种方法是覆盖OnResume()的{​​{1}}方法或启动结果活动。

当我按下后退按钮并从计数器中的原始产品数中减去它时,我想我需要将UserActivity中的DeleteCounter变量传递给CartActivity UserActivity 1}}并更新文本视图。

以下是TextView的部分代码,我只能在此代码中更新购物车计数器,单击按钮时会调用该函数。另外,UserActivity的代码在这里评论,我从上面的答案中尝试了SO问题链接。它没有成功:

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){ // 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

当我使用在两个活动中注释掉的代码,即对结果方法使用start活动时,会发生这种情况: 当我单击删除按钮时,项目将被删除,但 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也会显示为“0”值。

请告诉我您需要的任何其他信息。在删除UserActivity中的某些项目后,我可以通过按下后退按钮更新购物车计数器的任何其他方式。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

使用

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