动作栏的“主页”按钮的onClick侦听器


84

如何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

基本上,它就像在此链接中一样完成,但仍未输入到侦听器中。

Answers:


112

如果有人需要解决方案

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    if (id == android.R.id.home) {
        onBackPressed();  return true;
    }

    return super.onOptionsItemSelected(item);
}

这应该是一种解决方案。好的答案
jemsnaban '16

3
与我一起工作return true;
瑞克(Rick)2013年

1
将areturn true;放在代码if块的末尾,这是正确的
androidguy

2
此方法不适用于带有箭头图标的“主页/后退”按钮。
Trancer '17

111

我用的是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;
}

希望这项工作对您有帮助~~~


4
对我不起作用。无法覆盖onMenuItemSelected作为最终样式。
阿里特拉·罗伊

使用android批注时,只需使用@OptionsItem(android.R.id.home)public void yourMethod(){}
Italo Borssatto

23

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

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;
}

7

固定:无需使用setOnMenuItemClickListener。只需按下按钮,它就会通过意图创建并启动活动。

非常感谢大家的帮助!


正确,操作栏可以照顾菜单侦听器并onOptionsItemSelected()自动进行呼叫。无需手动安装(实际上可能会损坏东西)。
Nikolay Elenkov 2012年

5

回答一半的事情。如果在manifest.xml系统中设置了父级活动时,如果onOptionsItemSelected不是控制homeAsUp按钮,则转到父级活动。在活动代码中使用以下代码:

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

3

如果在ICS上运行,则需要显式启用home操作。从文档

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


3
我已经做了一个getSupportActionBar().setDisplayHomeAsUpEnabled(true);和一个getSupportActionBar().setHomeButtonEnabled(true);
noloman 2012年


-4

您应该删除您的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;

    }

1
请添加一些说明,以帮助人们理解和返回(返回?)阅读stackoverflow关于仅使用代码的答案的政策。
N0un
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.