Android中完成活动未关闭(Xamarin)

时间:2016-10-25 07:04:36

标签: android android-activity xamarin.android activity-finish onbackpressed

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

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按钮中单击我使用此代码完成当前活动并转到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设置打开即可,如果我点击完成。

UpDate:

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

我不明白发生了什么。任何帮助都要得到赞赏。

2 个答案:

答案 0 :(得分:0)

根据这篇文章,问题是在ListViewRecycleView内,如果我们执行了OnclickListener这样的任务,那么我们检查OnclickListener就像下面的其他方式一样将发射多个事件。

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

然后代码工作正常。

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

答案 1 :(得分:-1)

尝试添加标志意图

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