Я новичок в Android, и я работаю с функцией, связанной с поиском. После прочтения урока у меня возникли вопросы:
1 Является ли SearchableActivity
уникальным в приложении?
Кажется, что для настройки функции поиска требуется 3 шага (из руководства для разработчиков Android):
1) создайте SearchableActivity
для получения ключевого слова поиска.
2) заставить SearchableActivity
принять намерение ACTION_SEARCH
3) укажите конфигурацию с возможностью поиска для использования в элементе.
Тогда мне интересно, будет ли вся работа, связанная с поиском, делегирована SearchableActivity
?
И предположим, у меня есть два MainActivity
и MainActivityTwo
, оба они образуют SearchView
внутри панели действий.
AndroidMinefset.xml:
<activity android:name="com.app.activity.MainActivityTwo" />
<activity android:name="com.app.activity.MainActivity" />
<activity android:name="com.app.activity.SearchableActivity"
android:launchMode="singleTop" >
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
xml/search.xml:
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:hint="@string/search_hint"
android:label="@string/app_name" >
</searchable>
И зарегистрируйте конфигурацию поиска (serchableInfo) вSerchView
:
.Основная деятельность
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.u_action_menu_map, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
return super.onCreateOptionsMenu(menu);
}
Это не работает, кажется, что нет serchableInfo, связанного с текущей активностью (MainActivity
).
Даже я изменился на это:
searchView.setSearchableInfo(searchManager.getSearchableInfo(new ComponentName("com.app.activity", "SearchableActivity")));
Он по-прежнему не может найти searchableInfo.
После того, как я добавлю конфигурацию, связанную с поиском, в MainActivity
:
<activity android:name="com.app.activity.MainActivityTwo" />
<activity android:name="com.app.activity.SearchableActivity" />
<activity android:name="com.app.activity.MainActivity"
android:launchMode="singleTop" >
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
Это сработало. ВТФ.
Я всегда думал, что действие предоставляет пользовательский интерфейс поиска, а действие обрабатывает входные данные по-разному, но после моего теста кажется, что это одно и то же действие, то есть пользовательский ввод отправляется в само действие, но зачем использовать ** ing намерение передать входные данные?
2 Поиск отправить
В диалоговом окне поиска есть кнопка отправки поиска в правой части диалогового окна:
Но внутри SearchView
ничего нет, поэтому как отправить поиск в SearchView
: