我遇到片段事件的计时问题,希望有人能提供帮助。
按下按钮时,我的主要活动启动我的信息显示活动。第二个活动包含两个片段,两个片段都有大量EditText视图,用户可以在其中输入信息。
在片段中,我为每个视图使用FocusChange()事件处理程序。当视图失去焦点时,我知道文本编辑已完成,可以“抓取”新文本,我打算将其返回到“主活动”。
信息显示活动关闭时,它将意图返回到SetResult()中的Main活动。这是在OnBackPressed()和OnOptionsItemSelected()中完成的。
这一切都有效,但有一个例外:如果我单步浏览EditViews并更改文本,但是在从上一个EditView移出焦点之前,我先按下后退按钮,我发现该菜单中的OnActivityResult() Main Activity在片段中最后的FocusChange()事件被处理之前称为。尽管按下后退按钮确实会触发当前活动的EditText的FocusChange事件,但在调用OnActivityResult()后 处理此事件。结果是,在调用OnActivityResult()时,最终EditText的文本不是故意的。
主要活动
// Assemble information in intent
intent.PutExtra(InformationDisplayConstants.SUPPLIER_NAME, this.SupplierName);
....
// Assembled all the information needed, now start the Information Display activity.
displayActivity.StartActivityForResult(intent, resultCode);
显示活动开始片段。
片段1:初始化文本并设置事件处理程序 ....
EditText supplierName = view.FindViewById<EditText>(Resource.Id.supplierTextView);
supplierName.Text = Activity.Intent.GetStringExtra(InformationDisplayConstants.SUPPLIER_NAME);
// Create an event handler which runs when the user finishes changing the supplier name.
supplierName.FocusChange += new EventHandler<View.FocusChangeEventArgs>((sender, e) =>
{
if (!e.HasFocus)
{
informationDisplayActivity.IntentSetSupplierName(supplierName.Text);
}
});
...
信息显示活动
当用户按下“后退”键时,有组合意图返回到“主要活动”
“后退”按钮将在片段中触发FocusChange事件,但这是在OnBackPressed()和OnOptionsItemSelected()之后出现的,因此最终项目并不是意图接收Main Activity。
public override void OnBackPressed()
{
SetResult(Result.Ok, modifiedDataIntent);
Finish();
base.OnBackPressed();
}
public override bool OnOptionsItemSelected(IMenuItem item)
{
switch (item.ItemId)
{
case Android.Resource.Id.Home:
// Use Result.Canceled if we don't want to save modified data.
SetResult(Result.Ok, modifiedDataIntent);
Finish();
return true;
default:
return base.OnOptionsItemSelected(item);
}
}
是否有解决此问题的方法?