【问题标题】:Android ActionBarShelock onOptionsItemSelectedAndroid ActionBarShelock onOptionsItemSelected
【发布时间】:2023-04-08 13:58:02
【问题描述】:

我使用夏洛克的动作栏。我正在尝试将它实现到我的应用程序中。但似乎我错过了一些让它发挥作用的东西。请检查我的代码。当我点击操作按钮时,我的应用程序不执行任何操作。下面是我的代码和我的 xml。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getSupportMenuInflater();
    inflater.inflate(R.menu.activity_main, menu);


         menu.add("Share")
         .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);

         menu.add("Save")
         .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);

         menu.add("Set")
         .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);

        return super.onCreateOptionsMenu(menu);

}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
    case R.id.share:
        new share(this).execute(image_url);
        return true;
    case R.id.save:
        new save(this).execute(image_url);
        return true;
    case R.id.set:
        new set(this).execute(image_url);
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

我的菜单 xml

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

 <item android:id="@+id/share"
       android:title="@string/share"/>

 <item
        android:id="@+id/save"
        android:title="@string/save"/>

    <item
        android:id="@+id/set"
        android:title="@string/set"/>


</menu>

【问题讨论】:

    标签: android menu actionbarsherlock menuitem


    【解决方案1】:

    您正在从菜单的 xml 中膨胀菜单并添加 onCreateOptionsMenu,这两种方法都不应该同时进行

     menu.add(Menu.NONE, PREF_MENU_ITEM, Menu.NONE, R.string.channel_preferences_menu_label).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
            menu.add(Menu.NONE, FEEDBACK_MENU_ITEM, Menu.NONE, R.string.feedback_from_menu_label).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
            menu.add(Menu.NONE, ABOUT_MENU_ITEM, Menu.NONE, R.string.about_app_menu_label).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
            // commenting out this line because this func dosent have any use case
            // for APP version 3.0.0
    //      menu.add(Menu.NONE, SOCIAL_MENU_ITEM, Menu.NONE, R.string.social_app_menu_label).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
            menu.add(Menu.NONE, FAQ_MENU_ITEM, Menu.NONE, R.string.faq_app_menu_label).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
            menu.add(Menu.NONE, DIAGNOSIS_MENU_ITEM, Menu.NONE, R.string.diagnosis_app_menu_label).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
            menu.add(Menu.NONE, MY_ACCOUNT_MENU_ITEM, Menu.NONE, R.string.account_app_menu_label).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
    

    【讨论】:

      【解决方案2】:

      您可以像这样在菜单项上设置OnMenuItemClickListener

      @Override
      public boolean onCreateOptionsMenu(Menu menu) {
      
          menu.add("Share")
              .setOnMenuItemClickListener(this.mShareButtonClickListener)
              .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
      
          // Other items...
      
          return super.onCreateOptionsMenu(menu);
      }
      

      然后你创建你的 OnMenuItemClickListener:

      OnMenuItemClickListener mShareButtonClickListener = new OnMenuItemClickListener() {
      
          @Override
          public boolean onMenuItemClick(MenuItem item) {  
      
               // Example of action following your code
               new share(YouActivity.this).execute(YouActivity.this.image_url);
               return false;
          }
      };
      

      【讨论】:

      • 我收到此错误“无法在原始类型 void 上调用 setOnMenuItemClickListener(MenuItem.OnMenuItemClickListener)”
      • 对不起,我的错误,我编辑了。您必须在设置 ShowAsAction(..) 之前设置侦听器,因为它返回 void
      • 还有一个问题。那么我是否需要为我要放入的每个按钮创建一个额外的 OnMenuItemClickListener?
      • 不是强制性的,如果您愿意,可以对多个菜单项使用相同的 OnMenuItemClickListener,并在 onMenuItemClick(MenuItem) 内使用 item.getItemId() 方法识别它们。
      猜你喜欢
      • 1970-01-01
      • 2012-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多