【问题标题】:Mono for Android: Spinner within a listviewMono for Android:列表视图中的微调器
【发布时间】:2013-01-22 10:43:05
【问题描述】:

我有一个使用 ArrayAdapter 从 Web 服务填充的列表视图。 网络服务为我提供了我需要的所有数据。有些只是纯文本视图,还有一些在 EditText 和微调器之间交替。我很容易地展示它们,同时在 EditText 字段中填写它们应得的值。

问题在于填充 Spinner 的值。我可以在适配器中定义适配器吗?此外,我的数据来自 web 服务,作为一个字符串传递的 XML。

到目前为止,我在 Adapter.cs 中的 Spinner 代码:

if (item.FieldType == "OptionBOX")
    {
        Spinner SpinnerValue = (Spinner) view.FindViewById<Spinner>(Resource.Id.spinnerVal);
        SpinnerValue.Visibility = view.Visibility == ViewStates.Invisible ? ViewStates.Invisible : ViewStates.Visible;

        bool isReadOnly = bool.Parse(item.isReadOnly);

        if (isReadOnly == true)
        {
            SpinnerValue.Enabled = false;
            SpinnerValue.Focusable = false;
            SpinnerValue.FocusableInTouchMode = false;
        }
    }

我的微调器数据在 item.optbox_options 中。

我的 XML 中的一个表格以便于理解:

<Table diffgr:id="Table5" msdata:rowOrder="4">
<IdRec>5</IdRec>
<FieldId>1026</FieldId>
<FieldDesc>stanje rezervoarja</FieldDesc>
<FieldType>ComboBOX</FieldType>
<isReadOnly>true</isReadOnly>
<FieldValue>6</FieldValue>
<FieldTextValue>2/4</FieldTextValue>
<OptBox_Options>
<Options><myOPT FieldValue="1" FieldTextValue="0"/><myOPT FieldValue="2" FieldTextValue="1/4"/><myOPT FieldValue="6" FieldTextValue="2/4"/><myOPT FieldValue="7" FieldTextValue="3/4"/><myOPT FieldValue="8" FieldTextValue="4/4"/></Options>
</OptBox_Options>
</Table>

所以只是为了澄清我的需求和愿望: 我可以在适配器中使用适配器吗?如果可以 - 怎么做? 如何显示来自 OptBox_Options 行的数据?我需要在我的微调器中显示 FieldTextValue 列中的值。

【问题讨论】:

    标签: c# android xamarin.android spinner android-spinner


    【解决方案1】:

    为什么您认为不可能在您的自定义Adapter 中的某处实例化Adapter 以供您的ListView 填充其中的内容?您可以简单地在 ListViewAdapter 之外为您的 Spinner 实现 Adapter

    那你只需要想出一种解耦的方式,通过Adapters的层次结构传递数据,这样所有层级都能得到你想要的数据。

    但是我不认为ListView 设计模式适合这种交互,您可能会遇到触摸事件未被触发的问题。我认为ExpandableListView 将是您想要实现的设计模式的更明智选择,并且具有更好的可用性。

    您可以在此处找到ExpandableListView 的示例:ExpandableListView Mono for Android

    【讨论】:

      【解决方案2】:

      解决方法:

      List<string> entries = new List<string>();
      
      String rawXML = item.OptBox_Options;
      
      StringReader stream = null;
      XmlTextReader reader = null;
      
      DataSet xmlDS = new DataSet();
      stream = new StringReader(rawXML);
      // Load the XmlTextReader from the stream
      reader = new XmlTextReader(stream);
      xmlDS.ReadXml(reader);
      
      DataSet myOPTvalues = new DataSet();
      myOPTvalues = xmlDS;
      
      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;
      
          entries.Add(optItem.FieldTextValue);
          SpinnerValue.Tag = optItem.FieldValue;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多