1

我有一个带有几个值的微调器,我从我的网络服务中填充它。

填充微调器

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 来检测一切是否正常(假设服务下降或值本身发生了变化在服务器上(有人在服务器应用程序上添加了一个新字段),而用户正在填写表单等)

有没有办法告诉应用程序不要在活动加载时触发它,而是在实际用户交互时触发?

4

3 回答 3

4

我不能专门针对 Android 说话,但我在 Windows 上遇到过很多次。

我通常使用的解决方案是简单地添加一个布尔loading变量。在初始化开始时将其设置为 true,然后在结束时将其清除。

在您的事件处理程序中,ItemSelected您可以简单地检查这是否是作为初始加载的结果而触发的。

private void onItemSelected(....)
{
    if(loading)
    {
        return; //Ignore as form is still loading
    }

    //Normal event handling logic goes here
    ....
 }
于 2013-02-11T08:19:37.033 回答
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

于 2013-02-12T06:25:41.157 回答
1

只是为了澄清,当一个项目被选中时,该事件会触发。语义显然存在缺陷,但从技术上讲,该项目在最初加载时被选中,因为您可以立即询问微调器选择了哪个项目,因此正如其他答案所说,只需忽略第一次选择它,因为它保证是加载选择,然后正常进行。

于 2013-02-12T06:28:04.087 回答