Я пробовал следовать руководству здесь, но у меня возникают некоторые проблемы. Я правильно получил значок поиска, который появится в панели действий, но у меня возникли проблемы с привязкой searchable configuration
к SearchView.
Мой файл res/menu/options_menu.xml:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/search"
android:title="@string/search_title"
android:icon="@drawable/search"
android:showAsAction="collapseActionView|ifRoom"
android:actionViewClass="android.widget.SearchView" />
</menu>
Мой файл res/xml/searchable.xml(Примечание: мне пришлось создать папку "xml" в папке res, потому что ее не было. Я не думаю, что это должно иметь значение, хотя?
<?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" />
Мои res/values /strings.xml файл:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Starting To Feel It</string>
<string name="single_post">Single Post View</string>
<string name="search">Search Activity</string>
<string name="action_settings">Settings</string>
<string name = "pagination_last">Last</string>
<string name = "pagination_next">Next</string>
<string name = "player_play">Play</string>
<string name = "player_previous">Previous</string>
<string name = "player_next">Next</string>
<string name = "player_playlist">Playlist</string>
<string name = "player_progress_bar">Progress Bar</string>
<string name="drawer_open">Open navigation drawer</string>
<string name="drawer_close">Close navigation drawer</string>
<string name="search_title">Search STFI</string>
<string name="search_hint">Search STFI</string>
<string name="menu_item_picture">Menu Item Picture</string>
</resources>
Мой файл AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.stfi"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:theme="@android:style/Theme.Holo.Light" >
<activity
android:name=".StartingToFeelIt"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".activities.SinglePost"
android:label="@string/single_post">
</activity>
<activity
android:name=".activities.SearchActivity"
android:label="@string/search">
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
</application>
</manifest>
Все мои действия расширяют класс, который я назвал MenuActivity
, и вот функция onCreateOptionsMenu
define в MenuActivity.java:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.options_menu, menu);
// Associate searchable configuration with the SearchView
SearchManager searchManager =
(SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView =
(SearchView) menu.findItem(R.id.search).getActionView();
System.out.println("The component name is " + this.getComponentName().toString());
SearchableInfo info = searchManager.getSearchableInfo(getComponentName());
if(info == null)
{
System.out.println("It is null!");
}
searchView.setSearchableInfo(info);
return true;
}
Я всегда получаю эту информацию в этой функции null. Я не уверен, что я делаю неправильно, чтобы получить информацию, является нулевой, и я не уверен, как ее исправить. Я не уверен, нужен вам это или нет, но ниже мой класс SearchActivity. Сейчас он ничего не делает, кроме как попытаться отобразить поиск (однако он никогда не вызывается, потому что конфигурация поиска настроена неправильно). Файл сохраняется в com.stfi.activities.SearchActivity.java.
Другое примечание. Когда я распечатываю имя компонента в приведенной выше функции, я получаю The component name is ComponentInfo(com.stfi/com.stfi.StartingToFeelIt)
, а не только com.stfi.StartingToFeelIt. Это заставляет меня думать, что что-то не так с моим файлом AndroidManifest, но я понятия не имею, является ли это причиной того, почему я не могу прикрепить конфигурацию поиска.
public class SearchActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
handleIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
handleIntent(intent);
}
private void handleIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction()))
{
String query = intent.getStringExtra(SearchManager.QUERY);
System.out.println("You are searchin " + query);
}
}
}