【问题标题】:Cannot create actionbar menu item using actionbarsherlock无法使用 actionbarsherlock 创建操作栏菜单项
【发布时间】:2013-06-17 05:00:15
【问题描述】:

我在使用slidingmenu libraryactionbarsherlock 使用操作栏上的菜单项时遇到问题。

有人可以帮忙吗?

这里是代码

@Override
public boolean onOptionsItemSelected(MenuItem item) {   
    switch (item.getItemId()) {
    case android.R.id.home:
        toggle();
        return true;        
    }
    return onOptionsItemSelected(item);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getSupportMenuInflater().inflate(R.menu.menu, menu);        
    return true;
}

这是 menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item 
    android:id="@+id/print"
    android:title="@string/printItem"
    android:icon="@drawable/ic_print"
    android:showAsAction="always" />
<item 
    android:id="@+id/share"
    android:title="@string/shareItem"
    android:icon="@drawable/ic_action_share"
    android:showAsAction="always"
    android:actionProviderClass="android.widget.ShareActionProvider" />       

我的 logcat 说我遇到了运行时错误

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getSupportMenuInflater().inflate(R.menu.menu, menu);        
    return true;
}

【问题讨论】:

  • 您的 logcat 说您在 android.week08.fragments.MAPFragment.onStart 中有一个 NullPointerException - 这与您发布的代码有什么关系?
  • @ianhanniballake 我使用地图片段在 viewpager 中显示地图视图。这在我的真实设备上运行良好,这些日志是从我没有谷歌播放服务的模拟器粘贴的。问题是如果我不使用getSupportMenuInflater().inflate(R.menu.menu, menu); 并以编程方式添加菜单项,它就可以工作。我不明白根本原因:(
  • 那么您的菜单有什么问题?发布您收到的与菜单相关的错误日志。
  • 如果您在片段中创建菜单,请确保调用 setHasOptionsMenu(true),例如在 onCreate() 中。
  • 也许你应该使用其他库。我推荐谷歌官方的导航抽屉:developer.android.com/training/implementing-navigation/…

标签: java android actionbarsherlock android-viewpager


【解决方案1】:

不太明白你的问题。 此代码适用于我的应用程序。

在 MainActivity 中

@Override
public boolean onOptionsItemSelected(MenuItem item) {   
    switch (item.getItemId()) {
    case android.R.id.home:
        toggle();
        break;
    case R.id.print:
        //your code
        break;
    case R.id.share:
        //your code
        break;
    default: 
        return false;
    }
    return true;
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu, menu);
    return true;
}

在片段中

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    menu.clear();
    inflater.inflate(R.menu.menu_fragment,menu);
    super.onCreateOptionsMenu(menu, inflater);
}

【讨论】:

  • 我认为问题是我使用带有 2 个片段的 viewpager。如果我删除getSupportMenuInflater().inflate(R.menu.menu, menu); 并以编程方式添加菜单项,它就可以工作。我不明白根本原因:(
  • 在我的 MainActivity 中是 extends FragmentActivity ;它适用于getMenuInflater().inflate(R.menu.menu, menu);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多