所以我的应用程序中有一个默认的可搜索活动,如果我在简单活动中按下搜索按钮就可以了。但是当我在一个选项卡中,其内容是一个ActivityGroup而不是一个Activity时,应用程序崩溃了。
08-19 17:18:23.438: ERROR/AndroidRuntime(9078): Uncaught handler: thread main exiting due to uncaught exception
08-19 17:18:23.458: ERROR/AndroidRuntime(9078): java.lang.IllegalArgumentException: no ident
08-19 17:18:23.458: ERROR/AndroidRuntime(9078): at android.app.Activity.ensureSearchManager(Activity.java:3499)
08-19 17:18:23.458: ERROR/AndroidRuntime(9078): at android.app.Activity.startSearch(Activity.java:2648)
08-19 17:18:23.458: ERROR/AndroidRuntime(9078): at android.app.Activity.onSearchRequested(Activity.java:2612)
...
即使我在activityGroup中添加此代码,我仍然会崩溃:
@Override
public boolean onSearchRequested() {return false;}
答案 0 :(得分:4)
您好我发现您的解决方案无效。但它让我思考。这只发生在TabHost
位于TabHost中时。所以我在最内层TabHost
放了一个调试器,注意到onSearchRequest
从未被调用过。但是内部TabHost
内部的活动确实如此。所以我把它添加到内部活动
@Override
public boolean onSearchRequested() {
if (getParent() instanceof TabActivity) {
return getParent().onSearchRequested();
} else {
return super.onSearchRequested();
}
}
它现在有效。
答案 1 :(得分:2)
对不起,我没有尽快回答。
所以是的,问题已经解决,我认为它来自ActivityGroup,其中onSearchRequested()没有被覆盖,但无论如何都接受了这个事件。
所以解决方案就是:
@Override
public boolean onSearchRequested() {
return mLocalActivityManager.getCurrentActivity().onSearchRequested();
}
mLocalActivityManager是LocalActivityManager,用于启动不同的活动...
然后你必须覆盖组中显示的每个Activity中的onSearchRequested(),如果你不想要搜索对话框,最后只返回false。