2013-03-19 2 views
0

Я новичок в программировании на Android.
Хорошо, теперь у меня есть массив строк, как это:Как искать массив строк и возвращать имя элемента в массиве?

<string-array name="mStrArray"> 
    <item name="item1a">text to be searched no1</item> 
    <item name="item1b">text to be searched no2</item> 
    <item name="item2a">text to be searched no3</item> 
    <item name="item2b">text to be searched no4</item> 
</string-array> 

I поиск массива, как это, и возвращать результаты в адаптер список:

String[] names = getResources().getStringArray(R.array.mStrArray); 
     for (String s : names) { 
      int i = s.indexOf(searchKeyword); 
      if (i >= 0) { 
       //add results to listview adapter 
       countryList.add(new Country(s, "")); 
      } 
     } 

Моя проблема, я могу 't найти способ получить имя элемента внутри массива, из которого был найден результат.
Так в этом, например. Если я ищу no3, я бы получил имя элемента item2a, а также значение.
Любая помощь будет оценена по достоинству.

+1

Попробуйте использовать синтаксический анализатор XML – BobTheBuilder

+0

Вы можете попробовать использовать другую simplexmlframework для решения проблемы –

+1

Если вы используете строковые массивы, которые, как вы знаете, не меняются, почему бы просто не использовать два массива - один для имен элементов и один для текста для поиска. Когда происходит совпадение, вы можете получить соответствующее имя с помощью индекса. – Akash

ответ

0

Хорошо, так что благодаря akashasia мне удалось найти решение, это не очень элегантный, но по крайней мере он работает пока.
Так вот что я сделал:
Я сделал 2 массивы, как akashasia сказал, 1 для имен элементов и 1 для текста для поиска, например:

<string-array name="mStrArray"> 
    <item>text to be searched no1</item> 
    <item>text to be searched no2</item> 
    <item>text to be searched no3</item> 
    <item>text to be searched no4</item> 
</string-array> 

<string-array name="mStrArrayValues"> 
    <item>item1a</item> 
    <item>item1b</item> 
    <item>item2a</item> 
    <item>item2b</item> 
</string-array> 

И я изменил код этого :

String[] arrB = getResources().getStringArray(R.array.mStrArray); 
    for (String s : arrB) { 
     int i = s.indexOf(searchKeyword); 
     if (i >= 0) { 
      int position = -1; 
      for(int j = 0; j < arrB.length; j++) { 
       if(arrB[j] == s) { 
        position = j; 
        break; 
       } 
     } 

     .. 
     String[] arrBV = getResources().getStringArray(R.array.mStrArrayValues); 

     //finally I got the name of the value :-D 
     String mySc = arrBV[position]; 
     //some code..   
       } 
      } 

PS Это, вероятно, не самый лучший способ сделать это. Поэтому, если у кого-то есть мысли или улучшения, я бы очень признателен.

0

мой совет java.util.Arrays имеет BinarySearch метод aceepting множественный вариант, который поможет щ думать,

Arraysapi