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。

谢谢

Android Slider - 我们可以从项目 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;
    }