好的,我非常沮丧,我一直试图让SearchView工作几个小时,现在没有运气。我检查了如何处理这个,我找到了一个示例项目,示例项目运行良好。然后我在我的项目中实现了同样的事情,我搞砸了。意图不会激发。我不明白为什么。我跟着 this
我将所有活动都放在一个活动文件夹中,但删除了搜索和主要活动以查看是否属于这种情况......事实并非如此。在我的搜索结果活动中,我正在处理意图。它现在看起来像这样。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search_result);
// get the action bar
ActionBar actionBar = getActionBar();
// Enabling Back navigation on Action Bar icon
actionBar.setDisplayHomeAsUpEnabled(true);
txtQuery = (TextView) findViewById(R.id.txtQuery);
handleIntent(getIntent());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.search_result, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onNewIntent(Intent intent) {
setIntent(intent);
handleIntent(intent);
}
/**
* Handling intent data
*/
private void handleIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
txtQuery.setText("Search Query: " + query);
}
}
My Searchable XML看起来像这样。
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:hint="@string/search_hint"
android:label="@string/app_name" />
由于某种原因,搜索提示没有出现,但字符串资源显示并且已声明。
我的选项菜单如下所示
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/search"
android:title="Search"
android:icon="@android:drawable/ic_search_category_default"
android:showAsAction="collapseActionView|ifRoom"
android:actionViewClass="android.widget.SearchView" />
<item android:id="@+id/Menu"
android:title="MENU"
android:showAsAction="collapseActionView|ifRoom"
/>
我的Manifest看起来像这样。
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/MyTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name"
>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".activities.MenuActivity"
android:label="@string/title_activity_menu"
android:theme="@style/IDME.Theme.Transparent" >
</activity>
<activity
android:name=".activities.CategoriesActivity"
android:label="@string/title_activity_categories" >
</activity>
<activity
android:name=".SearchResultActivity"
android:label="@string/title_activity_search_result"
>
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
</activity>
</application>
</menu>
我的搜索视图充气机看起来像这样。
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.options_menu, menu);
SearchManager searchManager =
(SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView =
(SearchView) menu.findItem(R.id.search).getActionView();
searchView.setSearchableInfo(
searchManager.getSearchableInfo(getComponentName()));
return true;
}
我不能为我的生活弄清楚发生了什么,我跟着两个向导走了一个发球台,我看不出有什么不对。我已经搞乱了元数据,我真的不能再看到问题了。我被困了
答案 0 :(得分:0)
您的元数据不正确必须使用:
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable"
android:value="your package name of searchable activity.SearchResultActivity" />
答案 1 :(得分:0)
我也遵循完全相同的(官方Android)指南Setting Up the Search Interface,与OP @rubsnick在同一条船上。
事实证明,所有需要调整的是 -
<activity
android:name=".MainActivity"
android:label="@string/app_name"
>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<meta-data
android:name="android.app.default_searchable"
android:value=".SearchResultActivity" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
注意<meta-data
代码! (具体来说, android:name )
此外,无需在此处指定可搜索的 xml资源...而是在SearchResultActivity
活动中执行此操作,如下所示...
<activity
修改SearchResultActivity
,如下所示: <activity
android:name=".SearchResultActivity"
android:label="@string/title_activity_search_result" >
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data android:name="android.app.searchable" android:resource="@xml/searchable" />
</activity>
以下SO主题完全公正地说明为什么 default_searchable 而不是可搜索:
What's the difference between android.app.default_searchable and android.app.searchable meta-data?