【问题标题】:ActionBarSherlock crashes on SearchView on Android 4.xActionBarSherlock 在 Android 4.x 上的 SearchView 上崩溃
【发布时间】:2013-06-22 18:34:58
【问题描述】:

如果我使用:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getSupportMenuInflater().inflate(R.menu.main_menu, menu);
    com.actionbarsherlock.widget.SearchView searchView = new com.actionbarsherlock.widget.SearchView(Activity_TimetablePager.this);
...

系统崩溃并显示以下日志:

06-22 18:18:23.384: D/SherlockFragmentActivity(3613): [onCreatePanelMenu] featureId: 0, menu: com.android.internal.view.menu.MenuBuilder@af2ca820
06-22 18:18:23.384: D/ActionBarSherlock(3613): [dispatchCreateOptionsMenu] menu: com.android.internal.view.menu.MenuBuilder@af2ca820
06-22 18:18:23.384: D/ActionBarSherlock(3613): [callbackCreateOptionsMenu] menu: com.actionbarsherlock.internal.view.menu.MenuWrapper@af2cc5c8
06-22 18:18:23.384: D/Watson(3613): [onCreatePanelMenu] featureId: 0, menu: com.actionbarsherlock.internal.view.menu.MenuWrapper@af2cc5c8
06-22 18:18:23.384: D/SherlockFragmentActivity(3613): [getSupportMenuInflater]
06-22 18:18:23.384: D/ActionBarSherlock(3613): [getMenuInflater]
06-22 18:18:23.384: D/ActionBarSherlock(3613): [getActionBar]
06-22 18:18:23.384: D/AndroidRuntime(3613): Shutting down VM
06-22 18:18:23.384: W/dalvikvm(3613): threadid=1: thread exiting with uncaught exception (group=0xaecd1908)
06-22 18:18:23.384: E/AndroidRuntime(3613): FATAL EXCEPTION: main
06-22 18:18:23.384: E/AndroidRuntime(3613): android.view.InflateException: Binary XML file line #29: Error inflating class <unknown>
06-22 18:18:23.384: E/AndroidRuntime(3613):     at android.view.LayoutInflater.createView(LayoutInflater.java:613)
06-22 18:18:23.384: E/AndroidRuntime(3613):     at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)

这适用于 Android 2.3,但不适用于 4.x。我正在使用 ActionBarSherlock 4.3.1,在本例中是在 viewPager 活动中。这是一个已知问题吗?

(目前我有一个解决方法,我在 4.x 中使用默认的 android SearchView。)

【问题讨论】:

    标签: android actionbarsherlock searchview


    【解决方案1】:

    您是否尝试过在菜单 xml 资源中设置 actionView 类并在 onCreateOptionsMenu() 中获取它的(已经创建的)实例?

    例如,在您的 menu.xml 中:

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item android:id="@+id/search_item"
              android:title="@string/search"
              android:icon="@drawable/ic_menu_search"
              android:showAsAction="ifRoom|collapseActionView"
              android:actionViewClass="com.actionbarsherlock.widget.SearchView" />
    
    </menu>
    

    然后在你的代码中:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getSupportMenuInflater().inflate(R.menu.main_menu, menu);
    
        MenuItem searchItem = menu.findItem(R.id.search_item);
        SearchView searchView = (SearchView) searchItem.getActionView();
    
        ...
    }
    

    我在我的应用程序中使用了这种确切的模式,并且在 2.x 或 4.x 手机上没有发现任何问题。

    【讨论】:

    • 基本上我得到了相同的结果。在您的示例代码中,searchView = null,而 searchItem 仍然可以。因此 searchItem.getActionView 似乎是问题所在。
    • 您的评论引出了另一个类似的问题。如果我在清单活动定义中使用:android:theme="@style/Theme.Sherlock.Light",那么它可以工作。但是如果我使用样式:
    【解决方案2】:

    好的,问题来了:

    我没有使用特定于活动的主题。

    我没有定义:在 values-v14/styles.xml 中的误解,即如果我没有那个文件,它将使用旧样式。定义后,一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-09
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多