【问题标题】:Action Bar's onClick listener for the Home buttonAction Bar 的 Home 按钮的 onClick 监听器
【发布时间】:2012-06-20 05:42:50
【问题描述】:

如何为操作栏的主页按钮实现自定义onClickListener

我已经做了一个getSupportActionBar().setDisplayHomeAsUpEnabled(true);,现在我想将用户重定向到某个活动,以防点击主页按钮。

我试过了:

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
            item.setOnMenuItemClickListener(new OnMenuItemClickListener() {
                public boolean onMenuItemClick(MenuItem item) {
                    Intent i = new Intent();
                    i.setClass(BestemmingActivity.this, StartActivity.class);
                    i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(i);
                    return true;
                }
            });
        default:
            return super.onOptionsItemSelected(item);
        }
    }

但它从不进入onMenuItemClick

基本上,它就像在this link 中一样完成,但它仍然没有进入监听器。

【问题讨论】:

    标签: android android-intent actionbarsherlock onitemclicklistener


    【解决方案1】:

    如果其他人需要解决方案

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
    
        if (id == android.R.id.home) {
            onBackPressed();  return true;
        }
    
        return super.onOptionsItemSelected(item);
    }
    

    【讨论】:

    • 这应该是一个解决方案。很好的答案
    • return true;一起为我工作
    • if块的末尾放一个return true;,那就对了
    • 此方法不适用于带箭头图标的主页/返回按钮。
    【解决方案2】:

    我使用actionBarSherlock, 在我们设置supportActionBar.setHomeButtonEnabled(true);
    之后 我们可以重写 onMenuItemSelected 方法:

    @Override
    public boolean onMenuItemSelected(int featureId, MenuItem item) {
    
        int itemId = item.getItemId();
        switch (itemId) {
        case android.R.id.home:
            toggle();
    
            // Toast.makeText(this, "home pressed", Toast.LENGTH_LONG).show();
            break;
    
        }
    
        return true;
    }
    

    我希望这对你有用~~~祝你好运

    【讨论】:

    • 对我不起作用。无法将 onMenuItemSelected 覆盖为其最终版本。
    • 使用android注解只需使用@OptionsItem(android.R.id.home) public void yourMethod() { }
    【解决方案3】:

    如果我们使用系统给定的操作栏,则以下代码可以正常工作

    getActionBar().setHomeButtonEnabled(true);
    
    @Override
    public boolean onMenuItemSelected(int featureId, MenuItem item) {
    
        int itemId = item.getItemId();
        switch (itemId) {
        case android.R.id.home:
          //do your action here.
            break;
    
        }
    
        return true;
    }
    

    【讨论】:

      【解决方案4】:

      已修复:无需使用 setOnMenuItemClickListener。 只需按下按钮,它就会通过 Intent 创建并启动 Activity。

      非常感谢大家的帮助!

      【讨论】:

      • 对,操作栏负责菜单监听器并自动调用onOptionsItemSelected()。无需手动安装(这实际上可能会破坏)。
      【解决方案5】:

      回答了正在发生的事情的一半。如果 onOptionsItemSelected 在 manifest.xml 系统中设置父活动时无法控制 homeAsUp 按钮,则系统转到父活动。在活动标签中这样使用:

      <activity ... >
      <meta-data
      android:name="android.support.PARENT_ACTIVITY"
      android:value="com.activities.MainActivity" /> 
      </activity>
      

      【讨论】:

        【解决方案6】:

        如果在 ICS 上运行,您需要显式启用 home 操作。来自the docs

        注意:如果您使用图标导航到主页活动,请注意 从 Android 4.0(API 级别 14)开始,您必须 通过调用显式启用图标作为操作项 setHomeButtonEnabled(true) (在以前的版本中,图标是启用的 默认情况下作为操作项)。

        【讨论】:

        • 我已经做了一个getSupportActionBar().setDisplayHomeAsUpEnabled(true); 和一个getSupportActionBar().setHomeButtonEnabled(true);
        【解决方案7】:

        自定义操作栏 onClickListener 的最佳方式是 onSupportNavigateUp()

        此代码将很有帮助link for helping code

        【讨论】:

          【解决方案8】:

          您应该删除您的 Override onOptionsItemSelected 并使用此代码重新标记您的 onCreateOptionsMenu

          @Override
              public boolean onCreateOptionsMenu(Menu menu) {
                  // Inflate the menu; this adds items to the action bar if it is present.
                  getMenuInflater().inflate(R.menu.menu_action_bar_finish_order_stop, menu);
                  menu.getItem(0).setOnMenuItemClickListener(new FinishOrderStopListener(this, getApplication(), selectedChild));
                  return true;
          
              }
          

          【讨论】:

          • 请添加一些解释以帮助人们理解并去(返回?)阅读stackoverflow关于仅使用代码回答的政策。
          猜你喜欢
          • 2012-02-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-25
          • 2014-06-06
          • 1970-01-01
          • 2016-08-27
          相关资源
          最近更新 更多