我按照http://developer.android.com/guide/topics/search/search-dialog.html上描述的步骤在我的记事本应用程序中实现搜索功能.
我的问题是,当我完成搜索时,新的活动会打开捕获我的搜索查询.但我真正想要的是,查询返回到当前活动而不是开始新活动.
这可能吗?
更新:
AndroidManifest.xml中
<activity android:name="MyNotepad"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="android.intent.action.SEARCH"></action>
</intent-filter>
<meta-data android:resource="@xml/searchable" android:name="android.app.searchable"></meta-data>
</activity><activity android:name="Preferences" android:label="Preferences" >
</activity>
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>
JAVA代码
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_pad);
Intent intent = getIntent();
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
Toast.makeText(getApplicationContext(), query, Toast.LENGTH_LONG).show();
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch(item.getItemId())
{
case R.id.menuItemSearch:
startSearch("", false, null, false);
break;
}
return true;
}
即使我使用手机上的搜索按钮,它也不起作用.我因此认为问题出在AndroidManifest.xml中
Lac*_*nis 62
在Application Manifest中,您需要将当前活动定义为可搜索的活动.
<activity android:name="BrowseItems" android:label="@string/browseitems"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data android:name="android.app.searchable"
android:resource="@xml/itemsearchable" />
</activity>
Run Code Online (Sandbox Code Playgroud)
然后使用以下代码,该代码来自http://developer.android.com/guide/topics/search/search-dialog.html#LifeCycle
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.search);
handleIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
setIntent(intent);
handleIntent(intent);
}
private void handleIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
// Do work using string
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用该字符串重新加载您的活动,如果它是一个列表活动,您可以调用您用于加载数据的代码并使用其中的字符串.
Est*_*los 18
在您的可搜索活动中添加到AndroidManifest.xml:
android:launchMode="singleTop"
Run Code Online (Sandbox Code Playgroud)
所以,你的AndroidManifest.xml看起来像:
<activity android:name="MyNotepad"
android:label="@string/app_name"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="android.intent.action.SEARCH"></action>
</intent-filter>
<meta-data android:resource="@xml/searchable" android:name="android.app.searchable"></meta-data>
</activity><activity android:name="Preferences" android:label="Preferences" >
Run Code Online (Sandbox Code Playgroud)
原因:
从这篇文章:
活动启动模式有四个有效值:
"standard""singleTop""singleTask""singleInstance"
'标准'是默认值.这四个值分为两组:
'standard'和'singleTop'可以实例化多个活动实例,实例将保留在同一个任务中.对于"singleTask"或"singleInstance",活动类使用单例模式,该实例将是新任务的根活动.让我们检查每个值:"标准":
可以实例化活动类的多个实例,并且可以将多个实例添加到同一任务或不同任务.这是大多数活动的共同模式.
"singleTop":
与"标准"的区别在于,如果活动实例已存在于当前任务的顶部且系统路由意图此活动,则不会创建新实例,因为它将触发onNewIntent()方法而不是创建新对象.
我只是用这个:
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
//on submit
return false;
}
@Override
public boolean onQueryTextChange(String s) {
//get all text changes
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
当您必须在整个列表视图中进行搜索并且必须过滤出项目时,最好使用此方法。我从未使用清单文件实现搜索功能。这两种方法可以完成所有工作。
Rui*_*ivo -1
只需添加
<application>
<meta-data
android:name="android.app.default_searchable"
android:value="#Activity_Name" />
<!-- All your activities, service, etc. -->
</application>
Run Code Online (Sandbox Code Playgroud)
在 android_manifest.xml 文件中,其中 #Activity_Name 是处理搜索的活动的名称。
| 归档时间: |
|
| 查看次数: |
27910 次 |
| 最近记录: |