2012-10-17 31 views
12

Tôi có một hoạt động mà tôi muốn tìm kiếm. Khi tôi nhấp để tìm kiếm, sự kiện OnNewIntent nó được gọi hai lần ... Tôi đang làm gì sai?Tìm kiếm widget gọi OnNewIntent hai lần

tôi là tạo ra SearchView như thế này

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

tìm kiếm trên phương thức nhấp chuột ở đâu? xin vui lòng gửi nó cũng – Elior

+0

Có lẽ không liên quan nhưng bạn nên trả về true từ onCreateOptionsMenu. – Ran

+0

Bạn đã tìm thấy giải pháp chưa? Tôi đang đối mặt với cùng một vấn đề? –

Trả lời

1

Tôi đã có một vấn đề tương tự với DatePickerDialog ... nó có vẻ là một lỗi api. Nó hoạt động trên Android 2.2, nhưng không hoạt động trên Android 4.0+. Giải pháp của tôi là:

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

Đây không phải là giải pháp rõ ràng nhất, nhưng nó phù hợp với tôi. Hy vọng điều này có thể giúp đỡ.

+0

'(timesCalled% 2)' có nghĩa là nó nên được gọi là số lần, bạn muốn làm công cụ của bạn nếu nó được gọi là thậm chí số lần? – Solace

12

Tôi cho rằng bạn đã đặt hoạt động tìm kiếm của mình thành một hàng đầu và được ghi đè trênNewIntent để gọi setIntent trước khi xử lý mục đích tìm kiếm. Nếu vậy, đó là lỗi trong SearchView khi sử dụng bàn phím phần cứng giả lập.

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

Bạn có thể vô hiệu hóa bàn phím phần cứng trong giả lập của bạn bằng cách vào Settings -> Launguage & đầu vào và click vào Default.

Nếu bạn sử dụng bàn phím mềm, bạn chỉ nên xem nó một lần.

+0

xảy ra trên thiết bị ảo genymotion của tôi trên tài chính nexus không bao giờ lỗi này đã xảy ra. PS. tip tốt là đặt một số bản ghi trong phương pháp đó để chắc chắn tất cả là OK. – deadfish

+0

Làm thế nào tôi có thể kích hoạt bàn phím mềm trong trình giả lập genymotion? – Solace

+0

Vẫn đang diễn ra. Cảm ơn rất nhiều! – Y2i

Các vấn đề liên quan