89

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

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

4

8 回答 8

120

如果其他人需要解决方案

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

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

    return super.onOptionsItemSelected(item);
}
于 2015-02-24T09:20:11.637 回答
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;
}

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

于 2012-07-10T08:22:29.390 回答
24

if we use the system given action bar following code works fine

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;
}
于 2014-06-02T11:37:06.617 回答
7

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

非常感谢大家的帮助!

于 2012-06-18T09:30:45.757 回答
5

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

<activity ... >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.activities.MainActivity" /> 
</activity>
于 2016-07-10T07:38:59.257 回答
3

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

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

于 2012-06-18T09:09:38.963 回答
2

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

此代码将是帮助代码的有用链接

于 2016-06-08T03:53:30.283 回答
-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;

    }
于 2017-07-28T09:22:44.640 回答