Android中Activity跳转到具体的Fragment的方法

1、首先在需要跳转的Activity写此代码:

Intent intent = new Intent(from, MainActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.putExtra("flag", 3); 
startActivity(intent);

2、在MainActivity中写此代码:

@Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        int mFlag = intent.getIntExtra("flag", 0);
        if (mFlag == 3) { //判断获取到的flag值
            changeTab(mFlag);
        }
    }
// 跳转到对应的fragment
public void changeTab(int position) {
        switch (position) {
            case 0:
                mRgTab.check(R.id.rb_0);
                break;
            case 1:
                mRgTab.check(R.id.rb_1);
                break;
            case 2:
                mRgTab.check(R.id.rb_2);
                break;
            case 3:
                mRgTab.check(R.id.rb_3);
                break;
        }
    }

Activity的启动模式有四种:

  1. standard 默认的启动方式。在该模式中,每启动一个新活动,都会创建一个新的实例,并在任务栈中入栈,处于栈顶的位置。假设你不停地进入同一个活动,你点击了十次,就要返回十次才能退出程序,因为你在返回栈中创造了十个相同的实例,尽管活动是一样的。

  2. singleTop 栈顶单实例。启动一个新活动时,系统会检查该活动是否已经位于任务栈栈顶,如果是的话直接使用已存在的栈顶活动,否则就创建新活动并压入栈顶。
    (当该activity处于task栈顶时,可以复用,直接onNewIntent)

  3. singleTask 栈中单实例。 和 singleTop 类似,不过这里是检查整个任务栈的活动,如果发现已经存在该活动就将位于该活动上方的活动全部出栈,该活动成为新的栈顶。
    (oncreate该activity并销毁在他之上的其他activity)

  4. singleInstance 全局单实例。最特殊的模式,系统为该模式的活动分配一个独立的任务栈,该任务栈有且只有一个该活动实例。也就是说,如果已经创建过目标活动实例,那么将不会创建新的任务栈,而是唤醒之前创建过的活动实例。
    (应用场景:地图,Activity初始化需要大量资源)

这四种模式中,standard模式是默认的模式,其他三个想要使用的话,要在 AndroidMainFest 文件中进行修改(通过给对应的 activity 设置 launchMode 属性)。
上面分析的启动模式都是静态设置的,也就是在 Manifest 文件中设置的。

Task

Task就是一个任务栈,里面用来存放Activity,第一个进去的(Activity)处于栈的最下面,而最后创建的(Activity)则处于栈的最上面。从Task中取出(Activity)是从最顶端取出,也就是说先进后出,后进先出。而Activity在Task中的顺序是可以控制的,在Activity跳转时用到Intent Flag可以设置新建Activity的创建方式。

详细的概念可以查找与Intent的Flag标志相关的资料。

intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP ||Intent.FLAG_ACTIVITY_CLEAR_TOP); 这行代码的意思是 不再启动新的activity,并且系统会把要启动的Activity之上的Activity全部弹出栈空间。

  • 10
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值