Android Slider - 我们可以从项目 XML 中检索属性吗?
本文关键字:XML 检索 属性 项目 Slider 我们 Android | 更新日期: 2023-09-27 18:33:04
我目前正在使用 Xamarin 创建一个 Android 应用程序,所以你即将看到 C# 而不是 Java,但如果你知道如何在 Java 中解决同样的问题,我仍然会感谢您的回答......
我有一个滑块,我已经设置了一个字符串数组,如下所示:
<string-array name="house_style_array">
<item id="124">Item 1</item>
<item id="565">Item 2</item>
<item id="356">Item 3</item>
<item id="537">Item 4</item>
</string-array>
我创建了一个 ItemSelected 事件,我能够获取选定的字符串,例如"Item 1",但我找不到获取 id 的方法 - 以下代码根据字符串数组中的位置返回一个 id(从零开始),这是没有用的:
private void spinner_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e)
{
Spinner spinner = (Spinner)sender;
string toast = string.Format("The selection is {0}'r'nThe ID is {1}", spinner.GetItemAtPosition(e.Position), spinner.GetItemIdAtPosition(e.Position));
Toast.MakeText(this, toast, ToastLength.Long).Show();
}
有什么办法可以做我想做的事情。我见过创建对象的示例,但对于简单的 ID/字符串方案来说似乎过于复杂。我不反对更改 XML。
谢谢
试试这段代码:
string fileName = "yourfilePath";
string nodeList = "//string-array/item";
string itemInnerText = "Item 1";
string attributeName = "Id";
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(fileName);
XmlNodeList xmlNodeList = xmlDoc.SelectNodes(nodeList);
foreach(XmlNode node in xmlNodeList)
{
if (node.Item(0).InnerText == itemInnerText)
return node.Attributes[attributeName].Value;
}
最后,
我决定使用以下对象填充微调器,因为它给了我更大的灵活性:
Spinner spinner = FindViewById<Spinner>(Resource.Id.mySpinner);
spinner.ItemSelected += new EventHandler<AdapterView.ItemSelectedEventArgs>(spinner_ItemSelected);
ArrayAdapter adapter = new ArrayAdapter(this,
Resource.Layout.multiline_spinner_dropdown_item,
new Taxonomy[] { new Taxonomy( 123, "option1"),
new Taxonomy( 124, "option2"),
new Taxonomy( 125, "option3"),
new Taxonomy( 126, "option4") });
adapter.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem);
spinner.Adapter = adapter;
这允许我向对象添加任意数量的属性,并在用户选择一个选项时轻松使用它们:
private void spinner_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e)
{
Spinner spinner = (Spinner)sender;
Taxonomy selectedObject = (Taxonomy)spinner.Adapter.GetItem(e.Position);
//rest of code using selected object.
}
最后要做的是覆盖 Taxonomy 对象中的 ToString() 函数,以在微调器中显示所需的数据,例如:
public override string ToString()
{
return TaxonomyName;
}