我是java和android开发的新手; 我一直在开发一个应用程序,我需要一个带有操作栏的操作栏SearchView
.我看过谷歌的例子,但我无法让它工作.我一定做错了,我即将放弃应用程序开发:DI已经搜索但我没有找到任何有用的东西.也许你们可以帮助我:)
问题:我得到的搜索视图应该打开,但在此之后什么也没发生,我注意到我的searchManager.getSearchableInfo(getComponentName())返回null.另外,我给出的提示没有显示在我的搜索框中,这让我相信应用程序可能无法找到我的搜索文件?够了:)
MainActivity.java
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
// Get the SearchView and set the searchable configuration
SearchManager searchManager =
(SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView =
(SearchView) menu.findItem(R.id.menu_search).getActionView();
searchView.setSearchableInfo(
searchManager.getSearchableInfo(getComponentName()));
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
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_label">
</searchable>
Run Code Online (Sandbox Code Playgroud)
Androidmanifest
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.searchapp"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" …
Run Code Online (Sandbox Code Playgroud) 我正在尝试获取SearchView的建议.我为它实现了一个自定义内容提供程序.我也提到了这个链接来实现SearchView的建议.我面临的问题是,我得到空值searchManager.getSearchableInfo(getComponentName())
以下是片段:
AndroidManifest.xml中
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<provider android:name=".SearchProvider"
android:enabled="true"
android:authorities="com.example.currentlocationmapdemo"
android:grantUriPermissions="true"
android:exported="true">
<grant-uri-permission android:pathPattern="*" />
</provider>
<uses-library android:name="com.google.android.maps" />
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable"/>
</activity>
Run Code Online (Sandbox Code Playgroud)
searchable.xml
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="label"
android:hint="hint"
android:searchSuggestAuthority="com.example.currentlocationmapdemo"
android:searchSuggestSelection=" ? ">
Run Code Online (Sandbox Code Playgroud)
主要活动
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.searchview_in_menu, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
mSearchView = (SearchView) searchItem.getActionView();
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchableInfo info …
Run Code Online (Sandbox Code Playgroud) 我编写了这个小测试应用程序来演示问题,即当用户按下键盘上的搜索按钮时,不会启动可搜索的活动.
我一直在关注开发者指南,但是从我的网络搜索来看,事实证明官方开发者指南错过了一些观点. 从我的SO搜索(没有帮助):
参考1:通过在清单中的元素中添加标记来解决.我还查看了"用户词典"样本的清单(我不知道在哪里可以找到在线样本,或者我会链接到它).该标记位于application元素中.
参考2: res/xml/searchable.xml中的"android:label"和"android:hint"必须是对字符串资源的引用,而不是硬编码字符串.我的是.
参考3:在活动的清单中添加一个带有"android:name ="android.app.default_searchable""(以及"android:value ="<.searchable-activity-name>"")的标签.将要发起.试过这个,似乎没有用.
参考文献4: "您的可搜索活动必须做某事 - 并实际显示结果." 我的确如此,它通过ACTION_SEARCH操作接收意图,并将从intent中检索到的搜索查询字符串传递给名为"performSearch(string)"的方法,该方法在textview中显示字符串.
那么我做错了什么,我该怎么做才能解决这个问题呢?
代码: MainActivity.java - 只有一个SearchView - 用户输入查询并按下键盘上的"搜索"按钮.
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
Run Code Online (Sandbox Code Playgroud)
TestTwoActivity.java
public class TestTwoActivity extends Activity {
TextView tv;
private static final String TAG = TestTwoActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_two);
/**
* The following code enables assisted search on the SearchView by calling setSearchableInfo() …
Run Code Online (Sandbox Code Playgroud)