2012-04-18 4 views
1

Я хотел бы определить что-то вроде этого в папке проекта Реза:Есть ли способ, чтобы определить пользовательские тег в XML-ресурсах

<custommap name="MyMap"> 
    <entry key="@string/key1" value="1">K1</entry > 
    <entry key="@string/key2" value="2">K2</entry > 
    <entry key="@string/key3" value="3">K3</entry > 
    <entry key="@string/key4" value="4">K4</entry > 
</custommap> 

ли это как-то можно ?. Приведенный выше пример не передает компиляцию (я попытался вставить его в файл arrays.xml). Если возможно, как его можно получить из кода Java?

+0

возможно дубликат [Список Android значений с ключом] (HTTP: // StackOverflow .com/questions/10146195/android-list-of-values-with-key) –

+0

Да, список значений с ключом является одним из возможных вариантов использования. Но мой вопрос шире. Я привел только пример, не имел в виду, что это единственное средство для этого. Если бы можно было определить мои собственные теги, я бы использовал его для хранения всех видов статических данных, которые я теперь определяю как статические переменные. – ilomambo

+0

Jeffrey, Из решения в предоставленной вами ссылке. Я понимаю, что все может быть достигнуто с помощью строковых массивов и целочисленных и других типов массивов. Это приятное обходное решение, но это не так просто и элегантно, что можно написать любой тег, который вы хотите, с любым атрибутом, который вам нужен, а затем просто получить их значения в коде. – ilomambo

ответ

1
  1. Создайте свой собственный файл XML, щелкнув правой кнопкой мыши на папке Рез и создает новый файл в папке/XML.

  2. Прочитайте XML в ArrayList используя XmlParser следующим образом, путем поиска тегов XML:

    public ArrayList<textElement> PrepareListFromXml(String cat) 
    { 
        textElement te; 
    
        ArrayList<textElement> listItems = new ArrayList<textElement>(); 
        XmlResourceParser listXml = getResources().getXml(R.xml.<your resource name>); 
    
        int eventType = -1; 
        while (eventType != XmlResourceParser.END_DOCUMENT) 
        { 
         if (eventType == XmlResourceParser.START_TAG) 
         {     
          String strNode = listXml.getName(); 
          if (strNode.equals("entry")) 
          { 
           te.setText(listXml.getAttributeValue(null, "key")); 
           listItems.add(te); 
          } 
         } 
    
         try 
         { 
          eventType = listXml.next(); 
         } 
         catch (XmlPullParserException e) 
         { 
           // TODO Auto-generated catch block 
           e.printStackTrace(); 
         } 
         catch (IOException e) 
         { 
           // TODO Auto-generated catch block 
           e.printStackTrace(); 
         } 
        } 
    
        return listItems; 
    } 
    
+0

Отлично! Можете ли вы прояснить некоторые моменты, посмотрите на псевдо-XML, опубликованный выше, в начале. Does getname() возвращает «MyMap» или «custommap»? gettAttributeValue (null, "key") возвращает "@ string/keyN" N в зависимости от записи? Я предполагаю использовать ту же функцию, чтобы получить значения 1,2,3,4. Затем я должен использовать Map вместо ArrayList <>, чтобы иметь возможность подключать элементы с ключом или значением. Как получить K1, K2, K3, K4? Как вы обрабатываете атрибуты формата myattr: mysubatttr = "value"? – ilomambo

+0

wiztrail, забудьте об этом, я нашел много информации по googleing «XmlResourceParser». Спасибо, спасибо. – ilomambo

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