ActionBar导航功能
实现ActionBar的返回功能
通过调用
setDisplayHomeAsUpEnabled()
方法来启用ActionBar图标导航功能:setContentView(R.layout.activity_main); ActionBar actionBar = getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true);
在ActionBar图标的左侧出现了一个向左的箭头,通常情况下这都表示返回的意思.
因此最简单的实现就是在它的点击事件里面加入finish()方法就可以了,如下所示:
switch (item.getItemId()) { case android.R.id.home: finish(); return true; ... }
ActionBar的导航和BackPressed的区别
但是这样存在一个问题,就是每次返回都是返回上个一个activity。即都在相同的activity栈中返回。
想要实现。在同一个app内的多个activity,直接跳转回主页,而不是按照原来的顺序。
则应该按照下面方法进行实现:
现完成清单文件内的配置.增加
<acitivity android:name="xxxxx.activity"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="xxxxx.acitivity"(在此定义其父Acitivity) /> </activity>
可以看到,这里通过meta-data标签指定了MainActivity的父Activity是LaunchActivity,在Android 4.1版本之后,也可以直接使用android:parentActivityName这个属性来进行指定,如下所示:
<activity android:name="com.yanis.actionbar.TabActivity" android:parentActivityName="com.yanis.actionbar.MainActivity" > </activity>
要对android.R.id.home这个事件进行一些特殊处理,如下所示:
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: Intent upIntent = NavUtils.getParentActivityIntent(this); if (NavUtils.shouldUpRecreateTask(this, upIntent)) { TaskStackBuilder.create(this) .addNextIntentWithParentStack(upIntent) .startActivities(); } else { upIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); NavUtils.navigateUpTo(this, upIntent); } return true; ...... } }
其中,调用NavUtils.getParentActivityIntent()方法可以获取到跳转至父Activity的Intent,然后如果父Activity和当前Activity是在同一个Task中的,则直接调用navigateUpTo()方法进行跳转,如果不是在同一个Task中的,则需要借助TaskStackBuilder来创建一个新的Task。
这样的返回栈在notification中也有同样的应用。
想要点击notification栏中进入的Activity退出时,是回该app的主页。同样可以按照上面来配置。
首先在清单文件中,配置
<activity android:name=".ContentActivity" android:parentActivityName=".MainActivity"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity" /> </activity>
其次在创建pendingIntent调转时,使用TaskStackBuilder来存放Intent.和取出PendingIntnt
//创建intent指向目标对象 Intent intent = new Intent(this,ContentActivity.class); //创建TaskStackBuilder TaskStackBuilder taskStackBuilder =TaskStackBuilder.create(this); //将back进stack taskStackBuilder.addParentStack(ContentActivity.class); //将intent进stack taskStackBuilder.addNextIntent(intent); //从stack中取出pendingintent PendingIntent pendingIntent = taskStackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);