Я пытаюсь сделать SearchView на панели действий, чтобы запустить SearchResultsActivity, который зарегистрирован для обработки ACTION_SEARCH. Я делаю все необходимые шаги, но все равно не работает!
Вот код:
1. Пункт меню «Вид поиска»: (menu/main.xml)
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/search_action" android:icon="@android:drawable/ic_menu_search" android:actionViewClass="android.widget.SearchView" android:showAsAction="always|collapseActionView" /> </menu>
2. Конфигурация с возможностью поиска (xml/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="@string/search_hint"/>
2.1 добавление ссылки на конфигурацию с возможностью поиска в MainActivity в AndroidManifest.xml:
<activity android:name="com.me.searchonpre3.MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/> </activity>
3. Свяжите пункт меню Search View с конфигурацией поиска (MainActivity.java):
public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){ SearchView searchView = (SearchView) menu.findItem(R.id.search_action).getActionView(); SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); if (searchView != null) { searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); } } return true; }
4. добавьте новую активность SearchResultsActivity и отметьте ее для обработки SEARCH_ACTION:
открытый класс SearchResultsActivity расширяет ListActivity {
public static final String TAG = SearchResultsActivity.class.getSimpleName(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.i(TAG, "In SearchResult OnCreate"); setContentView(R.layout.activity_search_results); this.setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new String[]{"Product1", "Product2"})); } }
AndroidMainfest.xml:
<activity
android:name="com.me.searchonpre3.SearchResultsActivity"
android:label="@string/title_activity_search_results">
<intent-filter>
<action android:name="android.intent.action.SEARCH"/>
</intent-filter>
</activity>
Все вышеуказанные настройки и SearchResultsActivity не запускаются при нажатии значка клавиатуры поиска.
Что мне еще делать???
Примечание. Когда я добавляю setOnQueryTextListener, обратные вызовы вызываются в классе MainActivity.
android.support.v7.widget.SearchView
, чтобы избежать проверки SDK. - person Risadinha   schedule 25.10.2013