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

Android中Activity跳转到具体的Fragment的方法,第1张

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的启动模式有四种:

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

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

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

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全部d出栈空间。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/992978.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存