有人知道一个教程或如何用s 实现标准Android搜索界面的例子Fragment吗?换句话说,是否可以SearchManager在片段中使用标准搜索?
这是几天前的工作,但突然停止了.我只想在某些片段可见时使用操作栏搜索小部件.
现在我无法得到SearchView,现在getActionView总是返回null.
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_for_places">
</searchable>
Run Code Online (Sandbox Code Playgroud)
的Manifest.xml
<activity
android:name=".ui.activities.MainActivity"
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"/>
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable"/>
<meta-data
android:name="android.app.default_searchable"
android:value=".ui.activities.MainActivity" />
</activity>
Run Code Online (Sandbox Code Playgroud)
menu.xml文件
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myapp="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_search_place"
android:icon="@drawable/ic_2_action_search"
android:orderInCategory="1"
android:title="@string/title_search"
myapp:showAsAction="collapseActionView|ifRoom"
myapp:actionViewClass="android.support.v7.widget.SearchView"/>
</menu>
Run Code Online (Sandbox Code Playgroud)
片段
...
setHasOptionsMenu(true);
...
@Override
public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
inflater.inflate(R.menu.menu, menu);
MenuItem searchItem = menu.findItem(R.id.action_search_place);
mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem);
SearchManager searchManager = (SearchManager) getBaseActivity().getSystemService(Context.SEARCH_SERVICE);
if (mSearchView != null) …Run Code Online (Sandbox Code Playgroud) 我正在创建一个自定义SearchView,但到目前为止,如果用户点击searchView小部件,我没有找到(点击)事件或监听器.所以SearchView很接近,用户点击搜索图标(哪个监听器?!),SearchView被打开.见下图.我需要那个事件,因为我想在用户打开searchView后更改UI

编辑: 到目前为止我尝试的是
setOnClickListener 到SearchView元素 - >但它只在SearchView打开时触发(第2张图片)
搜索了SearchViewApi,但是没有听众那个动作(或者我是盲人?)
尝试使用onWindowFocusChangedsearchView 解决方法,但由于searchView隐藏在某种youtube/facebook侧边栏中,这不起作用
有任何想法吗?我也附上了我的SearchView代码,但不认为代码是错误的.只是没有听众.顺便说一句:欢迎任何变通方法.但如果SearchView在开始时关闭,那就太好了!(如上图所示)
public class AmplifySearchView extends SearchView implements
OnQueryTextListener, OnFocusChangeListener,
OnCloseListener {
private static final String DEBUG_TAG = "AmplifySeachView";
private Context context;
private DataBaseController datasource;
private StationListView searchResultListView;
private TextView noResultTextView;
private Boolean searchStarted = false;
public AmplifySearchView(Context context) {
super(context);
this.context = context;
}
public AmplifySearchView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
}
public void initSearchView(StationListView view, TextView noResultTextView) {
this.searchResultListView = view; …Run Code Online (Sandbox Code Playgroud) 我刚被一个小部件烧毁了.我可以看到问题的原因,但我无法确定原因或解决方案.我的小部件发出了一个搜索(SearchManager),活动启动了一个搜索对话框,但当它回调到我的小部件时,它创建了另一个对小部件的引用(即,thread-id是相同的,但是widget-id从65变为0).
这让我相信创建了一个新实例,并在文档中搜索了适用于该问题的设置.最终,我偶然发现了,android:launchMode="singleTop"并且只要我在AndroidManifest中设置它,中提琴!我的小部件工作.
这花了我两天的调试时间.
还有其他任何情况或者我的问题是否有更技术上更正确的答案?
我正在开发基于官方教程的搜索小部件界面:http://developer.android.com/guide/topics/search/search-dialog.html
问题:当我输入查询并按Ok/enter时,我的SearchableActivity不会被触发.
SearchableActivity的清单:
<activity android:name="SearchableActivity" android:launchMode="singleTop" >
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
Run Code Online (Sandbox Code Playgroud)
XML/searchable.xml
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:hint="Search" android:label="@string/app_name" >
</searchable>
Run Code Online (Sandbox Code Playgroud)
主动作生命周期方法,将动作栏添加图标(工作正常):
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.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()));
// Do not iconify the widget;expand it by default
searchView.setIconifiedByDefault(false);
return true;
}
Run Code Online (Sandbox Code Playgroud)
SearchableActivity.java
public class SearchableActivity extends ListActivity {
/** …Run Code Online (Sandbox Code Playgroud) 我目前的应用程序设置ListFragment在左侧和DetailsFragment右侧(类似于下面平板电脑上的布局).

在操作栏上,我有一个搜索小部件,当提交搜索词时,应该更新列表的内容(在ListFragment中).我一直在关注Android开发(搜索指南http://developer.android.com/guide/topics/search/search-dialog.html),但我有,让搜索更新相同的活动列表中的问题.
我已经设法通过在提交搜索词时调用新活动来实现某种形式的实现,但是这使得后退按钮表现得很奇怪(即,您按回去,然后转到上一个活动,搜索小部件仍然显示搜索词).
我已将意图行添加到清单中,如下所示
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable"/>
Run Code Online (Sandbox Code Playgroud)
是否有可能让搜索小部件更新当前活动的列表?
android android-searchmanager android-3.0-honeycomb android-4.0-ice-cream-sandwich android-actionbar
我在操作栏中设置搜索视图时遇到问题.
我跟着开发者网站,但它不起作用.我觉得我错过了什么.
当我运行我的代码时,它总是输出"无法获取可搜索的信息"(MainActivity.setupSearchView()).
MainActivity.java
// package...
// imports...
public class MainActivity extends Activity {
private static String tag = "Main Activity";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater mi = getMenuInflater();
mi.inflate(R.menu.search_view, menu);
setupSearchView(menu);
return true;
}
private void setupSearchView(Menu menu) {
SearchManager sm = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchableInfo si = sm.getSearchableInfo(getComponentName());
if (si == null) {
Log.wtf(tag, "failed to get searchable info");
return;
}
SearchView sv = (SearchView) menu.findItem(R.id.menu_search).getActionView();
sv.setSearchableInfo(si);
// …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) 有谁知道如何动态设置android搜索对话框提示?T尝试做类似的事情:
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/search_label"
android:hint="@string/search_hint"
android:id="@+id/search_dialog_text">
</searchable>
Run Code Online (Sandbox Code Playgroud)
某处:
@Override
public boolean onSearchRequested() {
Bundle appSearchData = new Bundle();
appSearchData.putString("SomeSpecificParam", SomeClass.class.getName());
startSearch("", false, appSearchData, false);
EditText text = (EditText )findViewById(R.id.search_dialog_text);
text.setHint("Search something else");
return true;
}
Run Code Online (Sandbox Code Playgroud)
但是文本等于null.
所以期待你的建议.谢谢.
我想让我的应用程序包含一个单一的活动.此活动应该能够创建搜索并接收搜索.不幸的是,当我点击操作栏中的搜索按钮时,我的SearchView中会出现一个"双"搜索栏.我的意思是有一个搜索栏(dark-- SearchView)在操作栏中显示一秒钟,然后在操作栏上显示第二个(白色).有帮助吗?我究竟做错了什么?对不起,这个搜索的东西都是新的,让我感到困惑.
MainActivity(唯一的活动):
public class MainActivity extends ActionBarActivity {
Menu mMenu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//getSupportActionBar().setDisplayShowTitleEnabled(false);
setContentView(R.layout.activity_main);
handleIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
handleIntent(intent);
}
private void handleIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
//use the query to search your data somehow
}
}
@SuppressLint("NewApi")
@Override
public boolean onCreateOptionsMenu(Menu menu) {
mMenu = menu;
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
if …Run Code Online (Sandbox Code Playgroud)