ActivityGroup和SearchDialog

时间:2010-08-19 15:22:54

标签: android

所以我的应用程序中有一个默认的可搜索活动,如果我在简单活动中按下搜索按钮就可以了。但是当我在一个选项卡中,其内容是一个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;}

2 个答案:

答案 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。