2013-01-22 49 views
0

我有一个列表视图,它使用ArrayAdapter从webservice填充。 Web服务为我提供了我需要的所有数据。有些仅仅是纯文本浏览器,而EditText和spinners之间则有其他替代方案。我很容易地展示它们,并在EditText字段中填充它们到期的值。Mono for Android:微调列表视图

问题出在填补微调器的价值。我可以在适配器中定义适配器吗?另外我的数据来自web服务,作为一个字符串传递的XML。

我的微调代码到目前为止我Adapter.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行的数据?我需要在我的spinners中显示FieldTextValue列中的值。

回答

0

使用解决:

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; 
} 
1

为什么您认为不可能在您的自定义Adapter内的某个地方为您的ListView实例化一个Adapter以在其中填充内容?您可以简单地在Adapter之外执行Adapter,Spinner,ListView

然后你只需要想出一个去耦方式通过Adapters层次来传递数据,使各级得到你想要的数据。

不过,我不认为ListView设计模式适合于这种互动的,你可能会与不会被解雇的触摸事件的问题。我觉得一个ExpandableListView是设计模式为你想达到什么样的一个比较明智的选择,也就有了更好的可用性。

你可以找到一个ExpandableListView这里的一个例子:ExpandableListView Mono for Android