Android 操作栏搜索小部件未检测到查询输入

Android 操作栏搜索小部件未检测到查询输入,android,android-intent,Android,Android Intent,我正试图在我的应用程序中的操作栏中实现一个搜索小部件,但每次我键入搜索查询并按enter键时,什么都没有发生。我认为这与我的AndroidManifest文件有关,但我已经尝试了很多方法,但都没有找到答案。此查询从api获取其结果。我已经试着让它工作了6个小时了。以下是我目前的代码(我尝试了许多不同的方法): searchable.xml <?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http

我正试图在我的应用程序中的操作栏中实现一个搜索小部件,但每次我键入搜索查询并按enter键时,什么都没有发生。我认为这与我的AndroidManifest文件有关,但我已经尝试了很多方法,但都没有找到答案。此查询从api获取其结果。我已经试着让它工作了6个小时了。以下是我目前的代码(我尝试了许多不同的方法):

searchable.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"/>

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"/>