我有一个带有一些值的微调器,我从我的网络服务中填充它。
填充微调器
int i = 0;
var dropItems = new List<SpinItem2>();
DataRow[] result = myOPTvalues.Tables[0].Select("FieldValue=" + item.FieldValue);
foreach (DataRow row in result)
{
var optItem = new PrevzemSpin();
optItem.FieldValue = row["FieldValue"].ToString();
if (optItem.FieldValue.Equals(""))
optItem.FieldValue = null;
optItem.FieldTextValue = row["FieldTextValue"].ToString();
if (optItem.FieldTextValue.Equals(""))
optItem.FieldTextValue = null;
dropItems.Add(new SpinItem2(i, optItem.FieldValue.ToString(), optItem.FieldTextValue.ToString()));
}
i = 1;
foreach (DataRow row in myOPTvalues.Tables[0].Rows)
{
var optItem = new PrevzemSpin();
optItem.FieldValue = row["FieldValue"].ToString();
if (optItem.FieldValue.Equals(""))
optItem.FieldValue = null;
optItem.FieldTextValue = row["FieldTextValue"].ToString();
if (optItem.FieldTextValue.Equals(""))
optItem.FieldTextValue = null;
if (optItem.FieldValue != item.FieldValue)
{
dropItems.Add(new SpinItem2(i, optItem.FieldValue.ToString(), optItem.FieldTextValue.ToString()));
}
++i;
}
出于某种原因,它的作用就像首先插入的项目在默认情况下被“选中”,然后触发我用来发送所选项目的ItemSelected事件,但我不希望这样。
由于我的屏幕上有很多这样的微调器,它实际上减慢了活动的速度,而且它还向字段发送了不正确的值,因为我使用ItemSelect来检测一切是否正常(假设服务掉线或者服务器上的值本身已更改(有人在服务器应用程序上添加了一个新字段),而用户正在填写表单等。)
是否有人告诉应用程序不要在活动加载时触发,而是在实际用户交互上?
答案 0 :(得分:4)
我无法专门为Android发言,但我在Windows上遇到过很多次。
我通常使用的解决方案是简单地添加一个布尔loading
变量。在初始化开始时将其设置为true,然后在结束时将其清除。
在ItemSelected
之类的事件处理程序中,您只需检查是否因初始加载而触发此操作。
private void onItemSelected(....)
{
if(loading)
{
return; //Ignore as form is still loading
}
//Normal event handling logic goes here
....
}
答案 1 :(得分:1)
在我宣布GetView之前:
int LastSpinnerSelectedPosition;
在我的微调器定义中:
LastSpinnerSelectedPosition = 0;
我的微调器ItemSelected事件:
var CurrentSelectedIndex = SpinnerValue.SelectedItemPosition;
if (CurrentSelectedIndex != LastSpinnerSelectedPosition)
{
// WHATEVER I WANTED TO DO ON ITEM SELECT ANYWAY
// Fix the LastSpinnerSelectedPosition ;)
LastSpinnerSelectedPosition = CurrentSelectedIndex;
}
简单; D
答案 2 :(得分:1)
只是为了澄清,选择项目时会触发事件。语义显然是有缺陷的,但从技术上讲,项目在最初加载时被选中,因为你可以立即询问微调器选择哪个项目,所以其他答案说,只要忽略它第一次被选中,因为它保证是加载选择,然后在此之后正常进行。