Android 操作栏搜索小部件未检测到查询输入
我正试图在我的应用程序中的操作栏中实现一个搜索小部件,但每次我键入搜索查询并按enter键时,什么都没有发生。我认为这与我的AndroidManifest文件有关,但我已经尝试了很多方法,但都没有找到答案。此查询从api获取其结果。我已经试着让它工作了6个小时了。以下是我目前的代码(我尝试了许多不同的方法): searchable.xmlAndroid 操作栏搜索小部件未检测到查询输入,android,android-intent,Android,Android Intent,我正试图在我的应用程序中的操作栏中实现一个搜索小部件,但每次我键入搜索查询并按enter键时,什么都没有发生。我认为这与我的AndroidManifest文件有关,但我已经尝试了很多方法,但都没有找到答案。此查询从api获取其结果。我已经试着让它工作了6个小时了。以下是我目前的代码(我尝试了许多不同的方法): searchable.xml <?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http
<?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" >
</searchable>
<?xml version="1.0" encoding="utf-8"?>
<item
android:id="@+id/action_websearch"
android:actionViewClass="android.widget.SearchView"
android:icon="@android:drawable/ic_menu_search"
android:showAsAction="always"
android:title="@string/search_title"/>
AndroidManifest.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" >
</searchable>
<?xml version="1.0" encoding="utf-8"?>
<item
android:id="@+id/action_websearch"
android:actionViewClass="android.widget.SearchView"
android:icon="@android:drawable/ic_menu_search"
android:showAsAction="always"
android:title="@string/search_title"/>
SearchAppsActivity
public class SearchAppsActivity extends ListActivity
{
private AppFrenzy restClient;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_browse_apps);
handleIntent(getIntent());
}
public void onNewIntent(Intent intent)
{
setIntent(intent);
handleIntent(intent);
}
public void onListItemClick(ListView l, View v, int position, long id)
{
}
private void handleIntent(Intent intent)
{
if(Intent.ACTION_SEARCH.equals(intent.getAction()))
{
String query = intent.getStringExtra(SearchManager.QUERY);
doSearch(query);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the options menu from XML
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.browse_apps, menu);
// Get the SearchView and set the searchable configuration
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
// Assumes current activity is the searchable activity
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(false); // Do not iconify the widget; expand it by default
return super.onCreateOptionsMenu( menu );
}
private void doSearch(String queryStr)
{
restClient = AppService.getService();
restClient.searchApps(queryStr, new Callback<List<App>>() {
@Override
public void success(List<App> apps, Response response) {
setListAdapter(new AppListAdapter(SearchAppsActivity.this, apps));
Log.v("test", "search successful");
Log.v("test", "search results:" + apps.toString() );
}
@Override
public void failure(RetrofitError retrofitError) {
Log.v("test", "failure");
}
});
}
}
公共类SearchAppsActivity扩展了ListActivity
{
私人应用程序客户端;
@凌驾
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u browse\u apps);
handleIntent(getIntent());
}
公共帐篷(意向)
{
设定意图(intent);
手册内容(意图);
}
public void onListItemClick(列表视图l、视图v、整数位置、长id)
{
}
私人无效手册内容(意图)
{
if(Intent.ACTION_SEARCH.equals(Intent.getAction()))
{
String query=intent.getStringExtra(SearchManager.query);
数据搜索(查询);
}
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//从XML中展开“选项”菜单
MenuInflater充气机=getMenuInflater();
充气机。充气(右菜单。浏览应用程序,菜单);
//获取SearchView并设置可搜索配置
SearchManager SearchManager=(SearchManager)getSystemService(Context.SEARCH\u服务);
SearchView SearchView=(SearchView)菜单.findItem(R.id.action_search).getActionView();
//假设当前活动是可搜索的活动
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName());
searchView.setIconifiedByDefault(false);//不要将小部件图标化;默认情况下展开它
返回super.onCreateOptions菜单(菜单);
}
私有void doSearch(字符串查询器)
{
restClient=AppService.getService();
restClient.searchApps(queryStr,new Callback(){
@凌驾
public void成功(列出应用程序、响应){
setListAdapter(新的AppListAdapter(SearchAppsActivity.this,apps));
Log.v(“测试”,“搜索成功”);
Log.v(“测试”,“搜索结果:+apps.toString());
}
@凌驾
公共无效故障(改型错误改型错误){
Log.v(“测试”、“失败”);
}
});
}
}
关于为什么我的搜索没有提交,您有什么想法吗?您可以使用SearchView.OnQueryTextListener解决您的问题 例如 main.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" >
</searchable>
<?xml version="1.0" encoding="utf-8"?>
<item
android:id="@+id/action_websearch"
android:actionViewClass="android.widget.SearchView"
android:icon="@android:drawable/ic_menu_search"
android:showAsAction="always"
android:title="@string/search_title"/>