2014-12-04 3 views
0

В настоящее время я использую Xamarin для создания приложения для Android, поэтому вы собираетесь увидеть C#, а не Java, но если вы знаете, как решить ту же проблему на Java, я по-прежнему буду признателен за ваш ответ ...Android Slider - можем ли мы получить атрибуты из XML элемента?

у меня есть слайдер, и я создал массив строк, как показано ниже:

<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 событие, и я могу получить выбранную строку, например, «Пункт 1», но я не могу найти способ получить идентификатор - следующий код возвращает идентификатор на основе позиции в массиве строк (с нуля), который не имеет смысла:

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/String. У меня нет никаких возражений против изменения XML.

Благодаря

ответ

0

В конце концов, я решил заполнить вертушку с использованием объектов, как показано ниже, поскольку это дает мне гораздо больше гибкости:

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. 
    } 

Последнее это сделать, это переопределить функцию ToString() в объекте таксономической, чтобы отобразить необходимые данные в блесны, например:

public override string ToString() 
    { 
     return TaxonomyName; 
    } 
0

Попробуйте этот код:

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; 
} 
+0

Привет, Спасибо за ответ - выше, вероятно, будет работать но не решение, на которое я пошел - я в конечном итоге изменил использование объектов в качестве ответа ниже - дал мне гораздо большую гибкость – Rick

Смежные вопросы