ActionBar(4)ActionBar的事件响应

本文主要内容:

1.导航按钮的事件响应

2.操作项action item的事件响应



一.导航按钮的事件响应

默认情况下,导航按钮(应用程序图标)显示在操作栏的左边。你能够把这个图标当做操作项来使用。导航按钮响应以下两个操作:

[向上级父层返回]

[向后平级“主”Activity返回]

   1.   向后平级 返回应用程序的“主”Activity必须调用setHomeButtonEnabled(true)方法

     

当用户触摸导航按钮时,系统会调用Activity带有android.R.id.home ID的onOptionsItemSelected()方法。在这个响应中,你既可以启动主Activity,也可以返回你的应用程序结构化层次中用户上一步操作的界面。

       如果你要通过导航按钮的响应来返回主Activity,那么就应该在Itent对象中包括FLAG_ACTIVITY_CLEAR_TOP标识。用这个标记,如果你要启动的Activity在当前任务中已经存在,那么,堆栈中这个Activity之上的所有的Activity都有被销毁,并且把这个Activity显示给用户。添加这个标识往往是重要的,因为返回主Activity相当与一个回退的动作,因此通常不应该再创建一个新的主Activity的实例,否则,最终可能会在当前任务中产生一个很长的拥有多个主Activity的堆栈。

例如,下例的onOptionsItemSelected()方法实现了返回应用程序的主Activity的操作:

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. @Override  
  2. public boolean onOptionsItemSelected(MenuItem item) {  
  3.     switch (item.getItemId()) {  
  4.         case android.R.id.home:  
  5.             // app icon in action bar clicked; go home  
  6.             Intent intent = new Intent(this, HomeActivity.class);  
  7.             intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
  8.             startActivity(intent);  
  9.             return true;  
  10.         default:  
  11.             return super.onOptionsItemSelected(item);  
  12.     }  
  13. }  
       在用户从另一个应用程序进入当前Activity的情况下,你可能还想要添加FLAG_ACTIVITY_NEW_TASK标识。这个标识确保在用户返回主页或上级页面时,新的Activity不会被添加到当前的任务中,而是在属于你自己的应用程序的任务中启动。例如,如果用户通过被另一个应用程序调用的Intent对象启动了你的应用程序中的一个Activity,那么选择导航按钮来返回主页或上级页面时,FLAG_ACTIVITY_CLEAR_TOP标识会在属于你的应用程序的任务中启动这个Activity(不是当前任务)。系统既可以用这个新的Activity做根Activity来启动一个新的任务,也可以把存在后台的拥有这个Activity实例的一个既存任务带到前台来,并且目标Activity会接受onNewIntent()回调。因此,如果你的Activity要接收另一个应用程序的Intent对象,那么通常应该给这个Intent对象添加FLAG_ACTIVITY_NEW_TASK标识,如:
[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);  

注意:如果你要使用导航按钮来返回主页,要注意从Android4.0(API 级别 14)开始,必须通过调用setHomeButtonEnabled(true)方法确保导航按钮能够作为一个操作项(在以前的版本,默认情况下,这个图标就能够作为一个操作项)。

2.  上级父层返回 应用程序上级页面导航

 

作为传统的回退导航(把用户带回任务历史中的前一个窗口)的补充,你能够让action bar图标提供向上级页面导航的功能,它应用把用户带回到你的应用程序的上级页面。例如,当前页面时你的应用程序层次比较深的一个页面,触摸导航按钮应该返回返回上一级页面(当前页面的父页面)。
          
         图4. Email应用程序的标准图标(左)和向上导航图标(右)。系统会自动添加向上指示。
       例如,图5演示了当用户从一个应用程序导航到一个属于不同应用程序的Activity时,“回退”按钮的行为。

            

       但是,如果在编辑完邮件之后,想要停留在Email应用程序中,那么向上导航就允许你把用户导航到Email应用程序中编辑邮件页面的上级页面,而不是返回到前一个Activity。图6演示了这种场景,在这个场景中,用户进入到Email应用程序后,不是按回退按钮,而是按操作栏图标来向上导航。

       

         图6. 从People应用进入Email应用后,向上导航的行为。

         要使导航按钮能够向上导航,就要在你的ActionBar中调用SetDisplayHomeAsUpEnabledtrue(true)方法。

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. protected void onCreate(Bundle savedInstanceState) {  
  2.     super.onCreate(savedInstanceState);  
  3.   
  4.     setContentView(R.layout.main);  
  5.     ActionBar actionBar = getActionBar();  
  6.     actionBar.setDisplayHomeAsUpEnabled(true);  
  7.     ...  
  8. }  

       当用户触摸导航按钮,系统会调用带有android.R.id.home ID的onOptionsItemSelected()方法。

       请记住要在Intent对象中使用FLAG_ACTIVITY_CLEAR_TOP标识,以便你不会这个父Activity存在的情况下,再创建一个新的实例。例如,如果你不使用FLAG_ACTIVITY_CLEAR_TOP标识,那么向上导航后,再按回退按钮,实际上会把用户带到应用程序的下级页面,这是很奇怪的。

注意:如果有很多用户能够到达应用程序中当前Activity的路径,那么,导航按钮应该沿着当前Activity的实际启动路径逐步的向会导航。

二.操作项action item的事件响应



在 onOptionsItemSelected 响应即可.

  1. @Override  
  2. public boolean onOptionsItemSelected(MenuItem item) {  
  3.     switch (item.getItemId()) {  
  4.         case android.R.id.home:  
  5.             // app icon in action bar clicked; go home  
  6.             Intent intent = new Intent(this, HomeActivity.class);  
  7.             intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
  8.             startActivity(intent);  
  9.             return true;  
  10. case ...: break;
  11.         default:  
  12.             return super.onOptionsItemSelected(item);  
  13.     }  
  14. }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值