搜索小部件调用OnNewIntent两次。

15

我有一个活动,在其中我想要进行搜索。当我点击搜索时,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); 
}

日志:

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$Stub$Proxy@b48b3470
10-17 07:45:48.561 D/dalvikvm(  963): GC_CONCURRENT freed 389K, 41% free 6027K/10183K, paused 0ms+0ms

搜索的 onClick 方法在哪里?请同时发布它。 - Elior
可能与此无关,但是你应该从onCreateOptionsMenu返回true。 - Ran
你找到解决方案了吗?我也遇到了同样的问题。 - Rahul Sainani
c1rus,droidster,你们能告诉我在哪个设备上遇到了这个问题吗?我只能在Genymotion模拟器上复现它,但在任何其他设备上都没有(S3、S4、运行4.0.4的Galaxy Nexus、运行4.3的Nexus 7)。 - eyal-lezmy
3个回答

18
假设您已将搜索活动设置为“single top”,并覆盖了onNewIntent以在处理搜索意图之前调用setIntent。如果是这样,在使用模拟器硬件键盘时,SearchView存在一个错误。
您可以通过转至“设置”->“语言和输入”并单击默认值来禁用模拟器中的硬件键盘。
如果您使用软键盘,则只应看到它一次。
参考链接:http://books.google.com/books?id=OFXJXbCXjTgC&pg=PT771&lpg=PT771&q=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

您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - deadfish
我应该如何在Genymotion模拟器中启用软键盘? - Solace
仍在发生。非常感谢! - Y2i

1
我曾经遇到过与DatePickerDialog类似的问题...这似乎是一个API的bug。它在Android 2.2上可以工作,但在Android 4.0+上不能。我的解决方法是:
int timesCalled = 0;
public void yourMethod(){
    timesCalled += 1;
    if ((timesCalled % 2) == 0) {
       //do your stuff here
    }
}

这不是最清晰的解决方案,但对我有用。希望能帮到你。


(timesCalled%2) 表示它应该被调用偶数次,如果它被调用了偶数次,你想要执行你的操作吗? - Solace


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接