我是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:https: //developer.android.com/training/search/setup.html
我创建了一个带有SearchView的菜单并配置了SearchView.但是,单击键盘上的"搜索"按钮或SearchView的提交按钮时,我的SearchResultActivity无法打开.
我还尝试按动作栏上的搜索小部件不会触发我的搜索活动,但我无法让SearchView打开第二个活动.有人可以帮忙吗?
这是我的菜单:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.sample.searchbarapplication.MainActivity">
<item
android:id="@+id/action_search"
android:orderInCategory="100"
android:title="@string/action_search"
android:icon="@drawable/ic_search_white_24dp"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="collapseActionView|ifRoom" />
</menu>
Run Code Online (Sandbox Code Playgroud)
search-configuration 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" />
Run Code Online (Sandbox Code Playgroud)
表现:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.sample.searchbarapplication">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<meta-data
android:name="android.app.default_searchable"
android:value=".MainActivity" />
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<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>
<activity android:name=".SearchResultActivity"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
</activity>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
MainActivity在其工具栏中包含SearchView:
public …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)