Action Bar 的 Home 按钮的 onClick 监听器

Posted

技术标签:

【中文标题】Action Bar 的 Home 按钮的 onClick 监听器【英文标题】:Action Bar's onClick listener for the Home button 【发布时间】: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 中一样完成,但它仍然没有进入监听器。

【问题讨论】:

【参考方案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;

    

【讨论】:

请添加一些解释以帮助人们理解并去(返回?)阅读***关于仅使用代码回答的政策。

以上是关于Action Bar 的 Home 按钮的 onClick 监听器的主要内容,如果未能解决你的问题,请参考以下文章

Android中Action Bar的使用

在 Navigation Drawer 的每个片段中实现不同的 Action Bar 项

使用 JS 或 CSS 检测 iOS 设备是不是有 home bar

在方法中使用 require_once

渲染期间的android studio sdk 22版异常:action_bar

此活动已经有一个由窗口装饰提供的操作栏(FEATURE_ACTION_BAR)