Mono for Android:列表视图中的微调器
本文关键字:视图 for Android 列表 Mono | 更新日期: 2023-09-27 17:55:12
我有一个列表视图,它是使用ArrayAdapter从Web服务填充的。网络服务为我提供了我需要的所有数据。有些只是纯文本视图,而其他则在 EditText 和微调器之间交替。我很容易显示它们,并在 EditText 字段中填写它们应有的值。
问题在于填充微调器的值。是否可以在适配器中定义适配器?此外,我的数据来自作为字符串传递的XML的网络服务。
到目前为止,我的微调器代码在我的适配器中.cs:
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行中的数据?我需要在我的微调器中显示字段文本值列中的值。
为什么您认为无法在自定义Adapter
中的某个位置实例化Adapter
,以便ListView
在其中填充内容?您可以简单地在ListView
的Adapter
之外为您的Spinner
实现Adapter
。
然后,您只需要想出一种解耦的方式来通过Adapters
层次结构传递数据,以便所有级别都获得所需的数据。
但是,我认为ListView
设计模式不适合这种交互,您可能会遇到触摸事件未触发的问题。我认为ExpandableListView
对于您要实现的目标来说,将是一个更明智的设计模式选择,并且将具有更好的可用性。
您可以在此处找到ExpandableListView
的示例:ExpandableListView Mono for Android
使用以下命令解决:
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;
}