2013-03-10 2 views
0

Я новичок в разработке Android.Как искать содержимое строк, хранящихся в XML-файле?

У меня есть действие, содержащее кучу фрагментов, каждый фрагмент показывает другой текст. Я установил текст во время выполнения из strings.xml (т.е. tv.setText ...)

Вот пример моего strings.xml:

<string name="string1">the content I want searched, text1</string> 
<string name="string2">the content I want searched, text2</string> 
<string name="string3">the content I want searched, text3</string> 

Это моя проблема:
I хотите добавить функции поиска в приложение, я хочу, чтобы иметь возможность искать слова внутри строк и возвращать целую строку пользователю. Так, например, если пользователь ищет текст2, он вернет целую строку.

Я уже прочитал руководство поиска на Android-разработчиков здесь: http://developer.android.com/guide/topics/search/index.html

Я также нашел кучу учебников, но все они, кажется, чтобы иметь дело с данными, хранящимися в базах данных SQLite.

Вот больше моего кода:
searchable.xml:

<?xml version="1.0" encoding="utf-8"?> 
<searchable xmlns:android="http://schemas.android.com/apk/res/android" 
    android:label="@string/app_name" 
    android:hint="Search" > 
</searchable> 

SearchableActivity:

public class SearchableActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.search); 

     handleIntent(getIntent()); 
    } 


    @Override 
    protected void onNewIntent(Intent intent) { 
     setIntent(intent); 
     handleIntent(intent); 
    } 



    private void handleIntent(Intent intent) { 
     if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
      String query = intent.getStringExtra(SearchManager.QUERY); 
      doMySearch(query); 
     } 
    } 

    private void doMySearch(String query) { 
    } 

} 

Любая помощь будет оценена

PS Это лучший способ сделать это? У меня много строк (> 1000) Я читал об использовании баз данных, но я не знаю, как преобразовать все мои данные в db и не знаю, как установить текст из db ... и т. Д.

ответ

0

Вместо использования строки используйте строковый массив. В ресурсе создать файл и там объявить как следующий

<?xml version="1.0" encoding="utf-8"?><resources> 
<string-array name="names"> 
    <item>the content I want searched, text1</item> 
    <item>the content I want searched, text2</item> 
    <item>the content I want searched, text3</item> 
</string-array> 

сейчас в коде выполните следующие действия для поиска Строка

String[] names = getResources().getStringArray(R.array.names); 
for (String s : names) { 
    int i = s.indexOf(searchKeyword); 
    if (i >= 0) { 
     // found a match 
    } 
} 
+0

Неплохая идея, но это не то, что я имел в виду. – Reda

+0

Я попробовал это в демонстрационном приложении, но у меня, похоже, есть некоторые проблемы с этим методом: 1-Как узнать количество найденных результатов. 2-Как я могу получить имя элемента (внутри массива) для найденных результатов.3-мне удалось поместить результат в пользовательский listadapter, но есть способ настроить onclick, чтобы открыть фрагмент, который содержит текст (я знаю, что это далеко вышло, но мне нужно найти лучший способ реализации поиска в приложение). Я все еще думаю, что должен быть лучший способ сделать все это, может кто-нибудь еще пролить свет на эту проблему. – Reda

+0

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

0

Я думаю, вам нужно искать в strings.xml файл с ключом, если я понимаете, что вы здесь ответ.

strings.xml

<string name="string1">the content I want searched, text1</string> 

метод для поиска внутри strings.xml

private String SearchForString(String message){ 
// get the resource id if matched any key in strings 
// message Passed string you want search for 
// "string" type of what you looking for 
// package name 

try { 
    int resId = getResources().getIdentifier(message , "string" , getPackageName()); 
    String stringReturned = getResources().getString(resId); 
return stringReturned; 
    } catch(Exception e){ 
    return null; 
    } 
    } 

метода вызова в настоящее время

SearchForString("string1"); 

он должен вернуть: содержание Я хочу искал , текст1

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