Я пытаюсь реализовать поиск в своем приложении для Android. Существует два действия: MainActivity, где выполняется поиск (через searchview в панели действий) и ResultsActivity, где выполняется поиск и список завышен с результатами. Проблема заключается в том, что метод getSearchableInfo, который я вызываю в onCreateOptionsMenu в основном действии, возвращает нуль, например, никакой файл searchable.xml не был прикреплен к этой операции. Я пробовал множество комбинаций метаданных в манифесте, также каждое решение, найденное в Интернете, и другие вопросы о стеке, но ничего не работает. Эти источники:SearchView: getSearchableInfo возвращает null
AndroidManifest.xml
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light" >
<activity
android:name="com.example.webparser.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>
<activity android:name="com.example.ResultsActivity" >
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
</activity>
<meta-data
android:name="android.app.default_searchable"
android:value=".ResultsActivity" />
</application>
** 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);
SearchManager searchManager = (SearchManager) getSystemService(getApplicationContext().SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.search)
.getActionView();
searchView.setSearchableInfo(searchManager
.getSearchableInfo(getComponentName()));
Log.d("Search:", searchManager.getSearchableInfo(getComponentName())
.toString());
return true;
}
** ResultsActivity.java **
private void handleIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
elementi = new ArrayList<String>();
for(Ricetta ricetta:ricette){
if(ricetta.getNome().toLowerCase().matches(query)){
elementi.add(ricetta.getNome());
}
}
adapter=new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
elementi);
lista.setAdapter(adapter);
Log.i("LOG:", "searching");
}
}
** поиск.xml **
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_name"
/>
Пожалуйста, обратите внимание, что я вставил Log.d где SearchView предполагается быть инициализирован, и где называется getSearchableInfo, поэтому во время выполнения NullPointerException поднимается, и приложение не запускается, но если этот журнал .d удаляется, то все, кроме поиска, работает (при нажатии enter в окне поиска ничего не происходит). Я думаю, что есть проблема с манифестом, но я не могу понять, что это такое. Кто-нибудь знает? Я также попытался запустить основное действие в singleTop, указывая на метатеги поиска с возможностью поиска на основное действие, но при этом возникает одно и то же исключение.