2013-05-30 4 views
4

Я успешно получил свою панель действий, чтобы отобразить ее прямо в андроиде. Теперь я пытаюсь выполнить поиск. Я пытаюсь начать с малого и, по крайней мере, посмотреть, могу ли я получить поисковый запрос, прежде чем пытаться и что-то делать с ним.Выполнить поиск с панели действий

Я после этого учебника здесь:

http://developer.android.com/training/search/setup.html

и создал класс SearchResultsActivity который выглядит для обработки поиска.

import android.app.Activity; 
import android.app.SearchManager; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.widget.Toast; 


public class SearchResultsActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     //possible more code 
     handleIntent(getIntent()); 
    } 

    @Override 
    protected void onNewIntent(Intent intent) { 
     //possible more code 
     handleIntent(intent); 
    } 

    private void handleIntent(Intent intent) { 

     if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
      String query = intent.getStringExtra(SearchManager.QUERY); 
      //use the query to search your data somehow 

      //toast error test 
      Context context = getApplicationContext(); 
      CharSequence text = "Hello toast!"; 
      int duration = Toast.LENGTH_SHORT; 

      Toast toast = Toast.makeText(context, query, duration); 
      toast.show(); 

     } 
    } 

    ///more code 

} 

Я попытался добавить тост, чтобы увидеть, был ли когда я ввел текст, а затем нажал поиск, если появится тост. Прямо сейчас нет тостов.

ответ

15

Я работаю над аналогичным проектом с виджем поиска в панели действий. Это совместимо только с API 11+, поэтому нет пряников, но это выглядит лучше. Вам все равно нужно настроить файл searchable.xml и добавить соответствующие метаданные в манифест. Я не уверен, как вы собираетесь это реализовать, но приведенный ниже код загружает ListView, а затем добавляет строку. Раздел onCreateOptionsMenu() настраивает виджет поиска и фильтрует ListView на основе вмененного текста. Надеюсь, поможет!

public class ListOfMathCourses extends ListActivity { 

    ArrayAdapter<String> adapter; 
    ListView list; 
    String[] math = new String[] {"Pre-Algebra", "Algebra I", "Algebra II", "Geometry", "Calculus"}; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.startingpoint); 
    list = (ListView) findViewById(android.R.id.list); 
    adapter = new ArrayAdapter<String>(this, R.layout.listviewrow, math); 
    list.setAdapter(adapter); 
    getListView().setTextFilterEnabled(true); 


    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) {   

     getMenuInflater().inflate(R.menu.menu_search, menu); 
     //getMenuInflater().inflate(R.menu.action, menu); 

     SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
     SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); 

      searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
      searchView.setIconifiedByDefault(false); 

     SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() 
     { 
      @Override 
      public boolean onQueryTextChange(String newText) 
      { 
       // this is your adapter that will be filtered 
       adapter.getFilter().filter(newText); 
       return true; 
      } 
      @Override 
      public boolean onQueryTextSubmit(String query) 
      { 
       // this is your adapter that will be filtered 
       adapter.getFilter().filter(query); 
       return true; 
      } 
     }; 
     searchView.setOnQueryTextListener(queryTextListener); 

     return super.onCreateOptionsMenu(menu); 

    } 

}

+0

Я буду для поиска в Интернете базу данных через API. Поэтому мне нужно получить этот термин из окна поиска и отправить его через прикрепленный к url ​​доступ к api, который затем вернет json. Мне нужно разобрать и вставить в представление списка. Я предполагаю, где в вашем коде находится фактическая строка поиска, которая введена? – Mike

+1

Я не эксперт в этом, но я думаю, что onQueryTextChange() обновляет список на основе ввода пользователем. То же самое с onQueryTextSubmit(). Они оба обновляют список, основываясь на том, что вы помещаете в виджет поиска. Строки - это newText и query. Они говорят, что фильтровать список. Поэтому, если вы отправили запрос по URL-адресу, это может сработать. Возьмите его с солью. Надеюсь, это поможет. –

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