2012-10-17 15 views
12

Ho un'attività in cui voglio cercare. Quando clicco per cercare, l'evento OnNewIntent viene chiamato due volte ... Cosa sto facendo male?Cerca widget chiama OnNewIntent due volte

Sto creando SearchView come questo

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 
+0

dove è il metodo di ricerca onClick? si prega di postare anche – Elior

+0

Probabilmente non correlato, ma si dovrebbe restituire true da onCreateOptionsMenu. – Ran

+0

Hai trovato una soluzione? Sto affrontando lo stesso problema? –

risposta

1

Ho avuto un problema simile con DatePickerDialog ... Sembra essere un bug di api. Funziona su Android 2.2, ma non su Android 4.0+. La mia soluzione è stata:

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

Non è la soluzione più chiara, ma funziona per me. Spero che questo possa aiutare.

+0

'(timesCalled% 2)' significa che deve essere chiamato un numero pari di volte, vuoi fare le tue cose se viene chiamato anche un numero di volte? – Solace

12

Suppongo che tu abbia reso l'attività di ricerca single top e overidden su NewIntent per chiamare setIntent prima di elaborare l'intento di ricerca. In tal caso, si tratta di un bug in SearchView quando si utilizza la tastiera hardware dell'emulatore.

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

È possibile disattivare la tastiera hardware nel vostro emulatore andando su Impostazioni -> launguage & ingresso e cliccare su Predefinito.

Se si utilizza la tastiera software, è necessario visualizzarla solo una volta.

+0

è accaduto sul mio dispositivo virtuale genymotion sul nesso fisico, mai questo errore si è verificato. PS. buon consiglio è di mettere alcuni registri in quel metodo per essere sicuri che tutto sia OK. – deadfish

+0

Come posso abilitare la tastiera virtuale nell'emulatore genymotion? – Solace

+0

Ancora in corso. Molte grazie! – Y2i

Problemi correlati