2016-12-28 5 views
0

У меня есть SearchView и готов, вот код, я использую в Java файл страницы, который имеет SearchView:сделать SearchView сделать поиск

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.options_menu, menu); 

     // Associate searchable configuration with the SearchView 
     SearchManager searchManager = 
       (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
     SearchView searchView = 
       (SearchView) menu.findItem(R.id.search).getActionView(); 
     searchView.setSearchableInfo(searchManager.getSearchableInfo(
       new ComponentName(getApplicationContext(), SearchableActivity.class))); 


     return true; 
    } 

Моя цель сейчас, чтобы этот SearchView поиск через сайт, полный TextView s. Каждый TextView содержит одно слово. Можно ли сделать SearchView найти TextView, который содержит только что введенное слово? Если да, то как? Если нет, как я могу сделать это по-другому?

С наилучшими пожеланиями, Джулиан

+1

попробуйте эту ссылку: http://stackoverflow.com/questions/30398247/how-to-filter-a-recyclerview-with-a-searchview –

ответ

2

SearchView не делает никакого поиска вообще, это простой виджет для ввода ключевых слов, показать недавно используемые ключевые слова и т.д. Вы должны реализовать «модель поиска», чтобы найти содержимое и отображать его где угодно.

+0

Неплохо, потому что я задал вопрос неправильно. Итак, у меня есть все, что было сделано до этого момента, следующий шаг, который я должен предпринять, - это определить Querys или что-то подобное или виртуальную таблицу, но я чувствую, что это не то, что я ищу, если я хочу искать TextViews. Поэтому в основном возникает вопрос: если я должен создать виртуальную таблицу для своей цели. – user7342339

+0

@ user7342339 Что вы подразумеваете под «поиском TextViews»? искать текст, показанный в виде виджета «TextView»? Если это действительно то, что вы хотите (вместо поиска в модели, например, sqlite db), вы можете использовать 'TextView.getText()' для получения содержимого для каждого виджета просмотра текста. – xizzhu

+0

У меня около 40 TextViews, содержащих все слова. Я хочу сделать это, чтобы искать слова внутри TextViews, но я не уверен, как сказать SearchViews и все, что связано с этим, что я хочу найти. – user7342339

1
@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     super.onCreateOptionsMenu(menu); 
     SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.menu_search)); 
     SearchManager searchManager = (SearchManager) getSystemService(Activity.SEARCH_SERVICE); 
     searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 

// Setting up custom search button icon 
     int searchImgId = android.support.v7.appcompat.R.id.search_button; // I used the explicit layout ID of searchview's ImageView 
     ImageView v = (ImageView) searchView.findViewById(searchImgId); 
     v.setImageResource(R.drawable.ic_search_black); 
     searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
      @Override 
      public boolean onQueryTextSubmit(String query) { 
       // Do operation 
       return true; 
      } 

      @Override 
      public boolean onQueryTextChange(String newText) { 
       return false; 
      } 
     }); 

     return true; 
    } 

menu_search.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:appcompat="http://schemas.android.com/apk/res-auto"> 

    <item 
     android:id="@+id/menu_search" 
     style="@android:style/Widget.ActionButton" 
     android:icon="@drawable/ic_search_black" 
     android:title="@string/search" 
     appcompat:actionViewClass="android.support.v7.widget.SearchView" 
     appcompat:showAsAction="always" /> 
</menu> 
+0

В нем говорится, что он не может решить метод getActivty(), я делаю ошибку новобранец? : D – user7342339

+0

getActivity() может быть заменен вашим другом контекста ... try ** getApplicationContext() ** или передать ** context ** вместо getActivity() если ваш код в действии, то удалите * * getActivity(). ** если вы используете фрагмент, чем решение try, упомянутое выше. –

+0

Я вижу, и какова цель последней строки? Потому что (меню, надувание) также отмечено красным, так как onCreateOptionsMenu не может быть применен к androidViewMenuInflate. Спасибо за помощь кстати! – user7342339

1

Я предполагаю, что вы пытаетесь сделать, это поиск по тексту внутри TextViews, определенных внутри макета. Я предполагаю, что здесь, что исходный текст является строка Array/ArrayList (TextViewData) в файле «Data.java

Вы можете дать этому попытку:.

1) сделать деятельность/фрагмент implement SearchView.OnQueryTextListener

2) Создать пустой ArrayList для хранения результатов поиска входа.

private ArrayList<Data> mSearchItems 

3) Добавьте эту строку в коде, где вы инициализировать SearchView

searchView.setOnQueryTextListener(this); 

4) Override следующие методы:

I) метод, названный по представить:

@Override 
    public boolean onQueryTextSubmit(String query) { 
    //Call a user defined mathod to handle the search. 
    handleSearch(query, Data.TextViewData) 
} 

II) Метод, вызываемый при изменении текста в поле поиска

@Override 
public boolean onQueryTextChange(String query) { 
    handleSearch(query, Data.TextViewData) 
} 

5)

private void handleSearch(String Query, ArrayList<Data> queryList){ 
mSearchItems.clear(); 
for(Data data : queryList){ 
    if(data.textviewone.toLowerCase().contains(Query.toLowerCase()) || 
    data.textviewtwo.toLowerCase().contains(Query.toLowerCase())) 
    mSearchItems.add(data); 
    //You can then swap the recycler view (if being used) or hide other text views and display only the one being searched for (in case of a match) 
    } 
} 
+0

Итак, мне нужно сохранить мои текстовые элементы внутри ArrayList, не так ли? – user7342339

+0

«Текст», если быть точным, а не TextViews –

+0

Пример: Если у вас есть TextView с идентификатором textviewone и ArrayList textData. И вы хотите показать «Мое имя userxyz» в TextView. Вы можете добавить текст в список, например: textData.add («Меня зовут userxyz»); и отображать его внутри textView как: TextView txt = (TextView) findViewById (R.id.textviewone); txt.setText (textData.get (0)); –

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

  • Нет связанных вопросов^_^