【问题标题】:SherlockListFragment 'onCreateOptionMenu' crashes on android 2.3.3SherlockListFragment 'onCreateOptionMenu' 在 android 2.3.3 上崩溃
【发布时间】:2013-04-15 12:30:26
【问题描述】:

我有一个通用的SherlockListFragment,它在我的应用程序中用于不同的情况。 这个片段有一个选项菜单项(一个SearchView),这里是SearchView创建的代码:

    @Override
public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.all_places, menu);

    final MenuItem searchMenuItem = menu.findItem(R.id.action_search);
    searchMenuItem.setOnActionExpandListener(this);

    final SearchView searchView = (SearchView) searchMenuItem
            .getActionView();
    searchView.requestFocusFromTouch();
    searchView.setQueryHint(getString(R.string.search_query_hint));
    searchView.setOnQueryTextListener(this);

}

问题是 ViewPager 中使用了这个片段实例之一,当滑动到它时,应用程序崩溃(仅在 HTC Desire 与 android 2.3.3 上),但适用于 ICS 和 JB 设备。顺便说一句,手动附加片段时(没有ViewPager)不会发生崩溃。

这是崩溃的堆栈跟踪:

java.lang.NullPointerException
    at android.view.View.dispatchRestoreInstanceState(View.java:6132)
    at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:1213)
    at android.view.View.restoreHierarchyState(View.java:6116)
    at com.actionbarsherlock.internal.view.menu.MenuBuilder.restoreActionViewStates(MenuBuilder.java:361)
    at com.actionbarsherlock.internal.ActionBarSherlockCompat.preparePanel(ActionBarSherlockCompat.java:503)
    at com.actionbarsherlock.internal.ActionBarSherlockCompat.dispatchInvalidateOptionsMenu(ActionBarSherlockCompat.java:272)
    at com.actionbarsherlock.app.SherlockFragmentActivity.invalidateOptionsMenu(SherlockFragmentActivity.java:150)
    at com.actionbarsherlock.app.SherlockFragmentActivity.supportInvalidateOptionsMenu(SherlockFragmentActivity.java:156)
    at android.support.v4.app.Fragment.setMenuVisibility(Fragment.java:781)
    at android.support.v4.app.FragmentStatePagerAdapter.setPrimaryItem(FragmentStatePagerAdapter.java:151)
    at android.support.v4.view.ViewPager.populate(ViewPager.java:1009)
    at android.support.v4.view.ViewPager.populate(ViewPager.java:880)
    at android.support.v4.view.ViewPager$3.run(ViewPager.java:238)
    at android.os.Handler.handleCallback(Handler.java:587)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:144)
    at android.app.ActivityThread.main(ActivityThread.java:4937)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:521)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
    at dalvik.system.NativeStart.main(Native Method)

我真的被这个问题困住了......任何帮助都会很棒。

编辑

切换到 ActionBarSherlock 开发分支 - 没有崩溃...谢谢大家。

【问题讨论】:

  • 进口是什么意思?
  • 所有库和库项目均已正确导入。并且源代码使用正确的导入。
  • “应用程序崩溃(仅在 HTC Desire 与 android 2.3.3 上),但适用于 ICS 和 JB 设备”表明您导入了错误的 API。例如。 android.view.MenuInflaterandroid.support.v4.view.MenuInflater
  • 你试过dev版本的ABS吗?它修复了与我类似的问题。

标签: android actionbarsherlock android-listfragment android-menu


【解决方案1】:

试试:

private editTextSearch;

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getSupportMenuInflater().inflate(R.menu.your_menu, menu);       
    menu.getItem(0).setActionView(R.layout.search); //Number of menu item
    editTextSearch = (EditText) menu.getItem(0).getActionView().findViewById(R.id.edit_search); //Your editetxt search

    return super.onCreateOptionsMenu(menu);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-02
    • 2012-09-10
    • 2016-11-17
    • 2014-12-25
    • 2012-10-17
    相关资源
    最近更新 更多