package com.example.activity; import android.app.SearchManager; import android.database.Cursor; import android.database.MatrixCursor; import android.os.Bundle; import android.provider.BaseColumns; import android.support.v4.content.ContextCompat; import android.support.v4.view.MenuItemCompat; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.SearchView; import android.support.v7.widget.SearchView.OnQueryTextListener; import android.support.v7.widget.SearchView.OnSuggestionListener; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.widget.AutoCompleteTextView; import android.widget.Toast; import com.example.R; import com.example.adapter.SearchSuggestionAdapter; public class ExampleActivity extends AppCompatActivity { private final String[] SEARCH_SUGGESTION_CURSOR_COLUMNS = {BaseColumns._ID, SearchManager.SUGGEST_COLUMN_TEXT_1, SearchManager.SUGGEST_COLUMN_TEXT_2}; private SearchView mSearchView; private SearchSuggestionAdapter mSearchSuggestionAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_example); } @Override public boolean onCreateOptionsMenu(Menu menu) { // action bar menu MenuInflater menuInflater = getMenuInflater(); menuInflater.inflate(R.menu.activity_example, menu); // search view mSearchView = new SearchView(getSupportActionBar().getThemedContext()); setupSearchView(mSearchView); // search menu item MenuItem searchMenuItem = menu.add(Menu.NONE, Menu.NONE, 1, R.string.menu_activity_example_search); searchMenuItem.setIcon(R.drawable.ic_menu_search); MenuItemCompat.setActionView(searchMenuItem, mSearchView); MenuItemCompat.setShowAsAction(searchMenuItem, MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); return super.onCreateOptionsMenu(menu); } private void setupSearchView(SearchView searchView) { // search hint searchView.setQueryHint(getString(R.string.menu_activity_example_search_hint)); // text color AutoCompleteTextView searchText = (AutoCompleteTextView) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text); searchText.setTextColor(ContextCompat.getColor(this, R.color.global_text_primary_inverse)); searchText.setHintTextColor(ContextCompat.getColor(this, R.color.global_text_secondary_inverse)); // suggestion listeners searchView.setOnQueryTextListener(new OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { // TODO Toast.makeText(ExampleActivity.this, "search: " + query, Toast.LENGTH_SHORT).show(); return true; } @Override public boolean onQueryTextChange(String query) { if(query.length() > 2) { updateSearchSuggestion(query); } return true; } }); searchView.setOnSuggestionListener(new OnSuggestionListener() { @Override public boolean onSuggestionSelect(int position) { return false; } @Override public boolean onSuggestionClick(int position) { Cursor cursor = (Cursor) mSearchSuggestionAdapter.getItem(position); String title = cursor.getString(cursor.getColumnIndex(SearchManager.SUGGEST_COLUMN_TEXT_1)); String subtitle = cursor.getString(cursor.getColumnIndex(SearchManager.SUGGEST_COLUMN_TEXT_2)); // TODO Toast.makeText(ExampleActivity.this, "suggestion: " + title + " / " + subtitle, Toast.LENGTH_SHORT).show(); return true; } }); } private void updateSearchSuggestion(String query) { // cursor // TODO MatrixCursor cursor = new MatrixCursor(SEARCH_SUGGESTION_CURSOR_COLUMNS); cursor.addRow(new String[]{"1", query + "ica", "Lorem"}); cursor.addRow(new String[]{"2", query + "dam", "Ipsum"}); cursor.addRow(new String[]{"3", query + "rap", "Dolor"}); // searchview content if(mSearchSuggestionAdapter == null) { // create adapter mSearchSuggestionAdapter = new SearchSuggestionAdapter(this, cursor); // set adapter mSearchView.setSuggestionsAdapter(mSearchSuggestionAdapter); } else { // refill adapter mSearchSuggestionAdapter.refill(this, cursor); // set adapter mSearchView.setSuggestionsAdapter(mSearchSuggestionAdapter); } } }