72

我怎样才能实现对操作栏的Home按键自定义onClickListener操作栏的onClick侦听器的主页按钮

我已经做了getSupportActionBar().setDisplayHomeAsUpEnabled(true);,现在我想将用户重定向到某一活动的情况下,点击Home键。

我试着用:

@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喜欢,但它仍然不听者进入。

回答

7

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

非常感谢大家对你的帮助!

+0

对,操作栏负责菜单监听器并自动调用'onOptionsItemSelected()'。无需手动安装(可以实际上破坏事物)。 –

3

你需要的,如果在运行ICS明确使家庭的行动。从the docs

注:如果您使用的图标,导航到家庭活动,提防 采用Android 4.0(API级别14)开始,你必须 明确启用该图标,通过操作项调用 setHomeButtonEnabled(真)(在以前的版本中,图标启用 作为默认的行动项目)。

+3

我已经做了删除您的覆盖onOptionsItemSelected和replate您onCreateOptionsMenu一个'getSupportActionBar()setDisplayHomeAsUpEnabled(真);'。和一个'getSupportActionBar()。setHomeButtonEnabled(true);' – noloman

107

我使用actionBarSherlock, 后我们设置supportActionBar.setHomeButtonEnabled(true);
我们可以覆盖onMenuItemSelected方法:你~~~好运气

+3

+1这也适用于本机操作栏。 – Phil

+4

不工作我我。无法覆盖onMenuItemSelected作为其最终。 –

+0

使用android注释只需使用@OptionsItem(android.R.id.home)public void yourMethod(){} –

20

如果我们使用

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

我希望这个工作系统给出的动作栏下面的代码工作正常

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

,如果别人需要的解决方案定制操作栏

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

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

    return super.onOptionsItemSelected(item); 
} 
+0

这应该是一种溶剂。很好的回答 – jemsnaban

+1

用'return true;'为我工作 – Rick

+0

在'if'块末尾加上'return true;'然后它是正确的 – user3175580

2

最好的办法是onClickListener onSupportNavigateUp()

该代码会在发生什么事半部分有帮助link for helping code

1

答案。如果onOptionsItemSelected不控制homeAsUp按钮,则在manifest.xml系统中设置的父活动转到父活动。在活动标签使用这样的:

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

你应该与此代码

@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