我找不到解决方案请帮忙
工具:
public class VentasActivity extends ActionBarActivity
implements NavigationDrawerFragment.NavigationDrawerCallbacks, android.support.v7.widget.SearchView.OnQueryTextListener
Run Code Online (Sandbox Code Playgroud)
where返回null:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (!mNavigationDrawerFragment.isDrawerOpen()) {
getMenuInflater().inflate(R.menu.sales, menu);
restoreActionBar();
// HERE RETURNS NULL
searchView = (SearchView) menu.findItem(R.id.action_product_search).getActionView();
if (searchView != null) {
final Menu menu_block = menu;
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
// collapse the view ?
menu_block.findItem(R.id.action_product_search).collapseActionView();
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
// search goes here !!
// listAdapter.getFilter().filter(query);
return false;
}
});
Log.i("sales module", "SearchView OK"); …Run Code Online (Sandbox Code Playgroud) 我试图使用SearchViewCompat与ActionBarSherlock在API 8应用.
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem item = menu.add("Search")
.setIcon(isLight ? R.drawable.ic_search_inverse : R.drawable.ic_search)
.setActionView(R.layout.collapsible_edittext);
item.setShowAsAction(
MenuItem.SHOW_AS_ACTION_ALWAYS |
MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
// To use SearchViewCompat, I need to add it to the Menu item as well:
View searchView = SearchViewCompat.newSearchView(this);
// ...
SearchViewCompat.setOnQueryTextListener(...);
// ...
item.setActionView(searchView);
Run Code Online (Sandbox Code Playgroud)
请注意,顶部和底部代码都需要调用setActionView().这是否意味着无法进行搜索?
我在操作栏中成功使用搜索小部件按照本指南执行搜索.搜索很好,但我想知道如何在搜索上传递其他变量.我可以覆盖相同的指南状态onSearchRequested(),但这似乎不适用于搜索小部件.
覆盖问题:
@Override
public boolean onSearchRequested() {
Bundle appData = new Bundle();
appData.putString("KEY", "VALUE");
startSearch(null, false, appData, false);
return true;
}
Run Code Online (Sandbox Code Playgroud)在我的活动类中获取包:
protected void onCreate(Bundle savedInstanceState) {
// ...
Intent intent = getIntent();
Bundle appData = intent.getBundleExtra(SearchManager.APP_DATA);
String value = appData.getString("KEY");
Log.d("VALUE", value);
// ...
}
Run Code Online (Sandbox Code Playgroud)我的应用程序在创建搜索类时崩溃,因为appData它总是如此null.
onSearchRequested() 被调用,但是捆绑包不适合我的onCreate()方法.
来自传递意图的所有额外内容都是{user_query=my-query, query=my-query}.
我正在为Android 3.2及更高版本开发应用程序android-support-v4.OnActionExpandListener当扩展操作栏中的SearchView以及何时折叠时,我需要实现"拦截".我的Android 4.0及更高版本的代码没问题,但对于3.2没有.
menu.xml文件
<item android:id="@+id/menu_search"
android:title="@string/menu_search"
android:icon="@android:drawable/ic_menu_search"
android:showAsAction="collapseActionView|always"
android:actionViewClass="android.widget.SearchView" />
Run Code Online (Sandbox Code Playgroud)
MyActivity.java
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.reader, menu);
final MenuItem searchMI = menu.findItem(R.id.menu_search);
if(searchView == null) {
//searchView = (SearchView) searchMI.getActionView();
searchView = (SearchView) MenuItemCompat.getActionView(searchMI);
searchView.setOnQueryTextListener(this);
searchView.setOnSuggestionListener(this);
searchView.setOnCloseListener(new OnCloseListener() {
@Override
public boolean onClose() {
//some code
return false;
}
});
}
int currentapiVersion = android.os.Build.VERSION.SDK_INT;
if (currentapiVersion <= android.os.Build.VERSION_CODES.HONEYCOMB_MR2) {
MenuItemCompat.setShowAsAction(searchMI, MenuItemCompat.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | MenuItemCompat.SHOW_AS_ACTION_ALWAYS);
MenuItemCompat.setOnActionExpandListener(searchMI, new OnActionExpandListener() {
/* (non-Javadoc)
* @see android.support.v4.view.MenuItemCompat.OnActionExpandListener#onMenuItemActionExpand(android.view.MenuItem) …Run Code Online (Sandbox Code Playgroud) java android android-3.0-honeycomb android-actionbar searchview
今天我花时间迁移到AppCompat库.除了我的SearchView,我已经成功设置了所有内容.
之前,它运行正常,但现在我nullPointerException在使用代码时不断获取
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
我到处寻找尝试为我的问题找到解决方案,但我找不到任何地方(我试过的那些不起作用).
任何指导都将受到赞赏,ty.
这是我打电话的地方:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
MenuItem searchItem = menu.findItem(R.id.search);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) MenuItemCompat
.getActionView(searchItem);
searchView.setSearchableInfo(searchManager
.getSearchableInfo(getComponentName()));
return super.onCreateOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud)
这是菜单XML文件:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:compat="http://schemas.android.com/apk/res-auto"
xmlns:app="http://schemas.android.com/apk/res/android" >>
<item
android:id="@+id/about"
android:orderInCategory="3"
android:showAsAction="never"
android:title="@string/about"/>
<item
android:id="@+id/rate"
android:orderInCategory="2"
android:showAsAction="never"
android:title="@string/rate"/>
<item
android:id="@+id/search"
android:icon="@android:drawable/ic_menu_search"
android:orderInCategory="1"
app:actionViewClass="android.support.v7.widget.SearchView"
compat:showAsAction="ifRoom|collapseActionView">
</item>
Run Code Online (Sandbox Code Playgroud)
表现:
Run Code Online (Sandbox Code Playgroud)<activity android:name="com.stack.overflow.MainActivity" android:label="@string/app_name" android:launchMode="singleTop" android:theme="@style/Theme.AppCompat" > <meta-data android:name="android.app.default_searchable" android:resource="@xml/searchable" /> <intent-filter> <action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.SEARCH" /> <category android:name="android.intent.category.LAUNCHER" /> …
我正在使用SimpleCursorAdapter在ListView中显示结果,但由于我必须在搜索期间(使用SearchView小部件)多次查询我的数据库,因此我担心光标可能会被打开.
这是我查询我的数据库并在ListView中显示结果的方法:
class SearchCustomers extends AsyncTask<String,Void,Cursor>{
@Override
protected Cursor doInBackground(String... params) {
//get the query
String query=params[0].toLowerCase(Locale.getDefault());
Cursor cursor=mDB.searchCustomersByName((query != null ? query : "@@@@"));
return cursor;
}
@Override
protected void onPostExecute(Cursor result) {
if (result != null) {
String[] from = new String[] { QuickOrderDB.ID,
QuickOrderDB.NAME,
QuickOrderDB.ADDRESS,
QuickOrderDB.PHONE_NUMBER };
int[] to = new int[] { R.id.customerIDTextView,
R.id.customerNameTextView,R.id.customerAddressTextView ,
R.id.customerPhoneTextView };
SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(SearchCustomersActivity.this,
R.layout.results_customer_item, result, from, to);
mResultsListView.setAdapter(cursorAdapter);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了很多东西来关闭光标,但即使我mResultsListView.setAdapter(cursorAdapter);在结果总是相同之后关闭它:一个空的ListView.
我已经看到了几个问题,其中提到光标将自动关闭,但我想确保这是真的. …
我有一个SearchView活动; 当用户执行搜索时,Fragment包含搜索结果的内容将添加到同一个Activity中.
现在,我想要的是,当SearchView点击(因此它的焦点,和用户类型有),在Fragment已经显示(containig搜索结果)应该变得暗淡/模糊.
于是,我就设置OnFocusChangedListener了SearchView在onActivityCreated生命周期回调方法Fragment,但它似乎并没有在所有被调用.
final Activity myActivity = getActivity();
Log.i(TAG, "myActivity>"+myActivity.toString());//check
SearchView mySearchView = (SearchView) myActivity.findViewById(R.id.searchActivity_searchView);
Log.i(TAG, "mySearchView>"+mySearchView.toString());//check
mySearchView.setOnFocusChangeListener(new OnFocusChangeListener() {
@SuppressLint("NewApi")
@Override
public void onFocusChange(View v, boolean hasFocus) {
Log.i(TAG, "onFocusChange OF OnFocusChangeListener IN SearchResultsFragment CALLED.");
if (hasFocus) {
myActivity.getWindow().setDimAmount(1.0f);
}
}
});
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?当用户点击并因此激活其中的搜索查询时,我该怎么做才能获得onFocusChanged被叫SearchView?
注意:如果需要完整的SSCCE代码,请在评论中提问,我会发布.
尝试在操作栏中包含搜索查看.为此,我做了以下事情:
在菜单文件夹中创建了MenuSearch.xml,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/action_search"
android:actionViewClass="Android.Support.V7.Widget.SearchView"
android:icon="@android:drawable/ic_menu_search"
android:showAsAction="always"
android:title="Search"/>
</menu>
Run Code Online (Sandbox Code Playgroud)
包含片段中的OnCreateOptionsMenu方法:
public override void OnCreateOptionsMenu(IMenu menu, MenuInflater inflater)
{
inflater.Inflate(Resource.Menu.MenuSearch, menu);
base.OnCreateOptionsMenu(menu, inflater);
var searchManager = (SearchManager) this.Activity.GetSystemService(Context.SearchService);
searchView = (SearchView) (menu.FindItem(Resource.Id.action_search).ActionView);
searchView.SetSearchableInfo(searchManager.GetSearchableInfo(Activity.ComponentName));
}
Run Code Online (Sandbox Code Playgroud)
我已经设置HasOptionsMenu = true;了片段的创建.
使用上面的代码,我在行中得到空指针searchView.SetSearchableInfo....不知道为什么会发生这种情况,尽管一切似乎都是正确的.
基于解决类似问题的一些建议,我还尝试了searchview的以下选项.
var item = menu.FindItem (Resource.Id.action_search);
var searchItem = MenuItemCompat.GetActionView(item);
searchView = searchItem.JavaCast<Android.Support.V7.Widget.SearchView>();
searchView.SetSearchableInfo(searchManager.GetSearchableInfo(Activity.ComponentName));
Run Code Online (Sandbox Code Playgroud)
但同样,我将searchView视为null.
现在我已经尝试了可能的选项,我对于为什么searchview变为null无能为力.
任何帮助深表感谢.
我正在编写一个搜索函数来访问库网站.当提交查询字符串时,程序启动一个新线程来解析Web上的信息.它在AVD上正常运行,但我的HTC DesireHD反复显示搜索结果(如果实际结果是1. 2. 3.它看起来是1. 2. 3. 1. 2. 3.).我在onQueryTextSubmit方法中设置了断点,发现方法onQueryTextSubmit()中的代码被执行了两次.这是我的代码:
sv.setOnQueryTextListener(new OnQueryTextListener(){
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
@Override
public boolean onQueryTextSubmit(String query) {
list.clear();
String str = null;
try {//encoding Chinese character
str = new String(query
.trim().getBytes(), "ISO-8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
SearchPost sp = new SearchPost(SEARCH_URL + str);
new Thread(sp).start();
return false;
}
});
protected class SearchPost implements Runnable{
public String url = "";
SearchPost(String urls){
url = urls;
}
public SearchPost() { …Run Code Online (Sandbox Code Playgroud) 我一直在尝试将自定义字体设置为android.support.v7.widget.SearchView查询提示和View.I中输入的文本.我尝试通过创建TypeFace对象动态地将字体从assests设置为searchView,但问题是"SearchView不包含一个setTypeface(Typeface tf)方法." 我确实尝试过自定义的SearchView类但找不到.
private void setFont(String font1, String font2, String font3)
{
Typeface tf = null;
tf = UiUtil.changeFont(MainActivity.this, font1);
btn1.setTypeface(tf);
tf = UiUtil.changeFont(MainActivity.this, font2);
btn2.setTypeface(tf);
tf = UiUtil.changeFont(MainActivity.this, font3);
btn3.setTypeface(tf);
tf = UiUtil.changeFont(MainActivity.this, font3);
// no set typeface method..
}
Run Code Online (Sandbox Code Playgroud)