Поиск в виджетном вызове OnNewIntent дважды
У меня есть активность, в которой я хочу выполнить поиск. Когда я нажимаю для поиска, event OnNewIntent
, он вызывается дважды... Что я делаю неправильно?
Я создаю Searchview следующим образом
public override bool OnCreateOptionsMenu(IMenu menu)
{
searchView = new SearchView(this);
var searchManager = (SearchManager)GetSystemService(Context.SearchService);
var searchableInfo = searchManager.GetSearchableInfo(ComponentName);
searchView.SetSearchableInfo(searchableInfo);
var search_item = menu.Add(new Java.Lang.String("Search"));
search_item.SetActionView(searchView);
search_item.SetShowAsAction(ShowAsAction.IfRoom);
var edit = menu.Add(0, insertItemID, 0, "Insert");
edit.SetShowAsAction(ShowAsAction.IfRoom);
edit.SetIcon(Android.Resource.Drawable.IcMenuAdd);
return base.OnCreateOptionsMenu(menu);
}
Log:
10-17 07:45:45.491 I/ActivityManager( 900): START {act=android.intent.action.SEARCH flg=0x10000000 cmp=Intranet.Intranet/intranet.screens.ContactListActivity (has extras)} from pid 2971
10-17 07:45:47.562 W/EGL_emulation( 2971): eglSurfaceAttrib not implemented
10-17 07:45:47.562 I/ActivityManager( 900): START {act=android.intent.action.SEARCH flg=0x10000000 cmp=Intranet.Intranet/intranet.screens.ContactListActivity (has extras)} from pid 2971
10-17 07:45:48.472 D/OpenGLRenderer( 2971): Flushing caches (mode 0)
10-17 07:45:48.481 D/dalvikvm( 900): GC_CONCURRENT freed 559K, 13% free 7991K/9159K, paused 1ms+1ms
10-17 07:45:48.500 W/InputManagerService( 900): Window already focused, ignoring focus gain of: [email protected]
10-17 07:45:48.561 D/dalvikvm( 963): GC_CONCURRENT freed 389K, 41% free 6027K/10183K, paused 0ms+0ms
Ответы
Ответ 1
Я предполагаю, что вы сделали свою поисковую активность одиночной вершиной и переопределенной onNewIntent для вызова setIntent до обработки намерения поиска. Если это так, это ошибка в SearchView при использовании аппаратной клавиатуры эмулятора.
http://books.google.com/books?id=OFXJXbCXjTgC&pg=PT771&lpg=PT771&dq=android+search+intent+sent+twice+bug&source=bl&ots=Ora1AJjh4A&sig=9yFBjCwJ1ARbXePHzcPYpG_QdFQ&hl=en&sa=X&ei=bbddUpbZCcLi4AOiioCIAw&ved=0CD8Q6AEwAw#v=onepage&q=android%20search%20intent%20sent%20twice%20bug&f=false
Вы можете отключить аппаратную клавиатуру в своем эмуляторе, выбрав Настройки → Launguage и ввод и щелкните по умолчанию.
Если вы используете мягкую клавиатуру, вы должны ее видеть только один раз.
Ответ 2
У меня была аналогичная проблема с DatePickerDialog... похоже, это ошибка api. Он работает на Android 2.2, но не на android 4.0+. Мое решение было:
int timesCalled = 0;
public void yourMethod(){
timesCalled += 1;
if ((timesCalled % 2) == 0) {
//do your stuff here
}
}
Это не самое ясное решение, но оно работает для меня. Надеюсь, это поможет.
Ответ 3
Почему бы вам не попробовать что-то вроде этого...
https://github.com/antoniolg/LimeApp/blob/master/src/com/limecreativelabs/app/actionbarsearch/ActionBarSearchActivity.java
пример приложения проекта здесь.
https://play.google.com/store/apps/details?id=com.limecreativelabs.app
и вы можете прочитать здесь спецификации проекта...
https://github.com/antoniolg/LimeApp