我试图在我的应用的主要活动上实施搜索栏。为此,我使用了android developer website。
中的文档我按照说明操作,我的搜索栏中有一些查询。这里的问题是,在我尝试进行搜索的第一次,我必须在搜索图标上单击2次。
首先,我的栏看起来像默认栏: Search bar by default
我注意到图标不是白色,它有一些透明度,但我选择了一个完整的白色图标。
然后点击图标后,我的栏看起来像这样: Search bar clicked one time
图标显示在左侧,我有一个后退按钮,因为我已经在搜索字段中。
当我再次点击搜索图标时,我终于得到了我想要的结果: Search bar in edit mode
当我退出搜索栏并再次执行时,它会持续1或2次,然后,我有正常的行为,只需点击一下,我就会从第一张图片转到最后一张图片。
这是我的档案:
menu_app.xml
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/search"
android:title="@string/search"
android:icon="@drawable/ic_search"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="android.widget.SearchView" />
</menu>
的AndroidManifest.xml
<activity
android:name=".activities.MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.SEARCH"/>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable"/>
</activity>
searchable.xml
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_name"
android:hint="@string/search"/>
MainActivity.java中的OnCreateOptionsMenu
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_main, menu);
// Associate searchable configuration with the SearchView
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
final SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
Log.d(TAG, s);
searchView.clearFocus();
return true;
}
@Override
public boolean onQueryTextChange(String s) {
Log.d(TAG, s);
return false;
}
});
return true;
}
提前感谢您的帮助!
答案 0 :(得分:0)
我终于解决了,请查看我对该解决方案的评论。