在 Android 中完成 Activity 未关闭 (Xamarin)

Finish Activity not close in Android (Xamarin)

我有两个 Activity,一个是 InventoryActivity,第二个是 StoneDetailActivity。在我的库存Activity 中有 RecycleView 在 RecycleView 按钮中单击 我使用下面的代码 StartActivityForResult 启动 StoneDetailActivity

Intent stonedetailIntent = new Intent(context, typeof(StoneDetailActivity));
stonedetailIntent.PutExtra("SearchitemObject", stoneJson);
stonedetailIntent.PutExtra("position", position);
context.StartActivityForResult(stonedetailIntent, 1000);
context.OverridePendingTransition(Resource.Animation.Slide_in_right, Resource.Animation.Fade_back);

StoneDetailActivity 按钮中单击我使用此代码完成当前 Activity 并转到 OnBackPressed()

public override void OnBackPressed()
 {
    Intent intent = new Intent();
    intent.PutExtra("BoolCheck", postflag);
    intent.PutExtra("Position", position);
    SetResult(Result.Ok, intent);
    Finish();
 }

并且在InventoryActivity中我已经设置了这个代码。

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
        {
            base.OnActivityResult(requestCode, resultCode, data);
            if (resultCode == Result.Ok)
            {

                bool checkflag = data.GetBooleanExtra("BoolCheck", false);
                int position = data.GetIntExtra("Position", -1);
                if (checkflag && position > -1)
                {
                    searchItems.RemoveAt(position);
                    inventAdapter.NotifyDataSetChanged();

                    txt_totalStone.Text = searchItems.Count.ToString();
                    txt_totalCarat.Text = searchItems.Sum(c => c.Weight.Value).ToString();
                    txt_totalAmount.Text = searchItems.Sum(c => c.Rate.Value).ToString();

                    mainActivityBool = true;

                    badgeCounttextView.Text = BizApplication.BADGE_COUNT.ToString();

                }

            }
        }

按钮点击代码:

add_to_cart_button.Click += async (sender, e) =>
                {
                    ProgressDialog pdialog = new ProgressDialog(this);
                    pdialog.SetMessage("Please Wait...");
                    pdialog.Show();

                    cartItem = new CartItem();
                    cartItem.StoneId = searchItem.PacketId;
                    cartItem.UserId = BizApplication.getCredential().Id;
                    cartItem.Amount = searchItem.Rate.Value;
                    cartItem.Discount = searchItem.Discount;

                    postflag = await InventoryService.AddToCart(cartItem);

                    if (postflag)
                    {
                        OnBackPressed();
                        BizApplication.BADGE_COUNT += 1;
                    }

                    pdialog.Dismiss();

                };

此代码第一次运行良好。但是,如果我再次执行相同的过程,即使我单击完成,StoneDetailActivity 也会设置为打开状态。

更新日期:

当我完全调试我的代码时,我发现当我第二次点击 OnBackPressed() 时。并再次完成我的调试启动 OnCreate activity 这就是它发生的原因。但是我没有重新开始那么为什么会发生。

发生了什么我不明白。感谢任何帮助。

尝试添加标志 Intent

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP);

根据这个 Post 问题是在 ListViewRecycleView 里面,如果我们执行一些任务,比如 OnclickListener 那么我们要检查的是 OnclickListener 就像下面的方式一样,它会触发多个事件。

 if (!button.HasOnClickListeners)
    {
        button.Click += this.clickHandler;
    }

那么代码运行正常。

有关更多详细信息,请访问: https://forums.xamarin.com/discussion/9244/single-click-on-button-invoking-multiple-clicks