2012-10-17 14 views
12

Mam aktywność, w której chcę szukać. Kiedy klikam, aby wyszukać, wydarzenie OnNewIntent nazywa się dwa razy ... Co robię źle?Wywołanie widgetu wyszukiwania OnNewIntent dwa razy:

Tworzę Searchview jak ten

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: com.android.internal.view.IInputMethodClient$St[email protected] 
10-17 07:45:48.561 D/dalvikvm( 963): GC_CONCURRENT freed 389K, 41% free 6027K/10183K, paused 0ms+0ms 
+0

gdzie jest wyszukiwanie w sprawie metody kliknięcia? proszę również przesłać go pod następujący adres: – Elior

+0

Prawdopodobnie nie jest powiązany, ale powinieneś zwrócić wartość true z onCreateOptionsMenu. – Ran

+0

Czy znalazłeś rozwiązanie? Mam do czynienia z tym samym problemem? –

Odpowiedz

1

miałem podobny problem z DatePickerDialog ... wydaje się być bug api. Działa na Androida 2.2, ale nie na Androida 4.0+. Moje rozwiązanie było:

int timesCalled = 0; 
public void yourMethod(){ 
    timesCalled += 1; 
    if ((timesCalled % 2) == 0) { 
     //do your stuff here 
    } 
} 

Nie jest najczystszym rozwiązanie, ale działa dla mnie. Mam nadzieję, że to może pomóc.

+0

'(timesCalled% 2)' oznacza, że ​​powinien on być nazywany parzystą liczbą razy, chcesz zrobić swoje rzeczy, jeśli nazywa się to nawet kilka razy? – Solace

12

Zakładam, że wykonałeś swoją akcję przeszukiwania na pojedynczym górnym i nadpisanym naNewIntent, aby wywołać setIntent przed przetworzeniem zamiaru wyszukiwania. Jeśli tak, jest to błąd w SearchView podczas używania klawiatury sprzętowej emulatora.

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

Można wyłączyć klawiaturę sprzętową w swoim emulatorze, przechodząc do Ustawienia -> Launguage & wejście i kliknij domyślną.

Jeśli używasz klawiatury ekranowej, powinieneś ją zobaczyć tylko raz.

+0

wydarzyło się na moim urządzeniu wirtualnym genymotion na physiscal nexus nigdy ten błąd nie wystąpił. PS. dobrą wskazówką jest umieszczenie niektórych dzienników w tej metodzie, aby mieć pewność, że wszystko jest w porządku. – deadfish

+0

Jak mogę włączyć miękką klawiaturę w emulator genymotion? – Solace

+0

Ciągle się dzieje. Wielkie dzięki! – Y2i

Powiązane problemy