在 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 问题是在 ListView
或 RecycleView
里面,如果我们执行一些任务,比如 OnclickListener
那么我们要检查的是 OnclickListener
就像下面的方式一样,它会触发多个事件。
if (!button.HasOnClickListeners)
{
button.Click += this.clickHandler;
}
那么代码运行正常。
有关更多详细信息,请访问:
https://forums.xamarin.com/discussion/9244/single-click-on-button-invoking-multiple-clicks
我有两个 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 问题是在 ListView
或 RecycleView
里面,如果我们执行一些任务,比如 OnclickListener
那么我们要检查的是 OnclickListener
就像下面的方式一样,它会触发多个事件。
if (!button.HasOnClickListeners)
{
button.Click += this.clickHandler;
}
那么代码运行正常。
有关更多详细信息,请访问: https://forums.xamarin.com/discussion/9244/single-click-on-button-invoking-multiple-clicks