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
4

3 回答 3

18

我假设您在处理搜索意图之前已将您的搜索活动设置为单一顶部并覆盖 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=bbddUpbZCcLi4AEioCIAwdUpbZCcLi4AEioCIAwedonepage= android%20search%20intent%20sent%20twice%20bug&f=false

您可以通过转到设置-> 语言和输入并单击默认来禁用模拟器中的硬件键盘。

如果您使用软键盘,您应该只看到一次。

于 2013-10-15T21:56:39.443 回答
1

我在 DatePickerDialog 上遇到了类似的问题……这似乎是一个 api 错误。它适用于 android 2.2,但不适用于 android 4.0+。我的解决方案是:

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

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

于 2013-09-05T08:31:06.730 回答
0

你为什么不尝试这样的事情......

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

于 2013-06-21T12:36:10.760 回答