Notification和Actionbar的返回导航

ActionBar导航功能

实现ActionBar的返回功能

  1. 通过调用setDisplayHomeAsUpEnabled()方法来启用ActionBar图标导航功能:

    setContentView(R.layout.activity_main);
    ActionBar actionBar = getActionBar();  
    actionBar.setDisplayHomeAsUpEnabled(true); 
    

在ActionBar图标的左侧出现了一个向左的箭头,通常情况下这都表示返回的意思.

  1. 因此最简单的实现就是在它的点击事件里面加入finish()方法就可以了,如下所示:

    switch (item.getItemId()) {  
            case android.R.id.home:  
                finish();
                return true; 
            ...
            }  
    

ActionBar的导航和BackPressed的区别

但是这样存在一个问题,就是每次返回都是返回上个一个activity。即都在相同的activity栈中返回。
想要实现。在同一个app内的多个activity,直接跳转回主页,而不是按照原来的顺序。
则应该按照下面方法进行实现:

  1. 现完成清单文件内的配置.增加

    <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> 
    
  2. 要对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的主页。同样可以按照上面来配置。

  1. 首先在清单文件中,配置

     <activity
            android:name=".ContentActivity"
            android:parentActivityName=".MainActivity">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".MainActivity" />
        </activity> 
    
  2. 其次在创建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);
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值