我正在尝试使用我的应用程序布局中的SearchView在我的Android应用程序中实现搜索功能。我故意选择在布局中而不是在操作栏中使用它。
问题是,一旦我输入搜索文本并按下键盘上的输入/搜索键,就不会发生任何事情。永远不会调用可搜索的意图。我觉得我必须遗漏一些导致搜索不能触发的内容
如果我没有在下面以正确的格式包含代码,我道歉。如果有任何其他信息可以提供帮助,请与我们联系。提前致谢!
清单
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.lotr.arda.MainActivity"
android:label="@string/app_name" >
</activity>
<activity
android:name=".WebActivity"
android:theme="@android:style/Theme.NoTitleBar" >
</activity>
<activity
android:name=".menuActivity"
android:theme="@android:style/Theme.NoTitleBar" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.google.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize">
</activity>
<activity android:name=".searchActivity" >
<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>
RES / 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/searchhint" >
</searchable>
SearchActivity.java
package com.lotr.arda;
import android.app.ListActivity;
import android.app.SearchManager;
import android.content.Intent;
import android.os.Bundle;
public class searchActivity extends ListActivity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.search_page);
// Get the intent, verify the action and get the query
Intent intent = getIntent();
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
System.out.println(query);
//doMySearch(query);
}
}
}
menuActivity.java(searchview所在的布局)
package com.lotr.arda;
import com.google.ads.AdRequest;
import com.google.ads.AdView;
import android.app.Activity;
import android.app.SearchManager;
import android.app.SearchableInfo;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.SearchView;
public class menuActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.menu_page);
try{
AdView myad = (AdView) findViewById(R.id.ad);
AdRequest adRequest = new AdRequest();
myad.loadAd(adRequest);
SearchManager searchManager = (SearchManager)getSystemService(SEARCH_SERVICE);
SearchableInfo searchableInfo = searchManager.getSearchableInfo(getComponentName());
SearchView sv = (SearchView)findViewById(R.id.searchView1);
sv.setSearchableInfo(searchableInfo);
Button alpha = (Button)this.findViewById(R.id.button1);
alpha.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(menuActivity.this, MainActivity.class);
startActivity(intent);
}});
}catch(Exception e) {System.out.println(e.toString());}
}
}
答案 0 :(得分:3)
您错过了SearchView#setOnQueryTextListener
。您需要覆盖OnQueryTextSubmit()
方法才能实际执行和处理搜索。
编辑:我假设您正在查询数据库并使用Cursor获取结果。
mSearchView.setOnQueryTextListener(new OnQueryTextListener()
{
@Override
public void onQueryTextSubmit(String query) {
Cursor c = getContentResolver.query(URI, null, "col_1 = ? OR col_2 = ?", new String[] { query, query }, null);
//Do whatever you want with your Cursor here
}
}
);
答案 1 :(得分:1)
要快速查看,您的AndroidManifest中似乎错过了default_searchable
设置。
在MainActivity的活动设置下,您应该添加此
<meta-data
android:name="android.app.default_searchable"
android:value=".WebActivity" />
答案 2 :(得分:0)
确保您的searchables.xml
文件位于正确的位置(即res/xml/
文件夹中)并且同一文件不包含任何错误 - 否则您会发现(SearchManager)getSystemService(Context.SEARCH_SERVICE).getSearchableInfo(componentName)
将返回null,从而破坏您的搜索功能。
(另外,请确保以适当的方式设置componentName
,因为Android指南中显示的示例仅适用于您在同一活动中进行搜索和显示搜索时。)