Android实用技术

日更(十五)-Android-页面跳转的小技巧

2019-01-15  本文已影响40人  Jlanglang

瞎扯

这个月赶项目,今天到家都10点了.

写个activity,fragment的跳转

要考虑是不是在上班时候写点了.哈哈

Fragment

第一种,在fragment中再添加一个到自己的主activity.

   /**
     * @param fragment 跳转的fragment
     * @param tag      fragment的标签
     */
    @Override
    public void startFragment(Fragment fragment, String tag, boolean isAddBack) {
        FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
        fragmentTransaction.add(android.R.id.content, fragment, tag).hide(this);
        if (isAddBack) {
            fragmentTransaction.addToBackStack(tag);
        }
        fragmentTransaction.commitAllowingStateLoss();
    }

这里有个关键点,就是android.R.id.content

用过都知道,添加fragment需要一个framlayout的id.

而已这个android.R.id.content就是我们根部局的id.

每个activity都会有一个这样的根部局.

这样我们就可以节省一层布局,不需要再写一个framlayout了.

小细节

hide(this) 因为是fragment中启动,所以传this就是隐藏当前启动的fragment

为什么要hide()呢.因为fragment就相当于一个view.
如果不隐藏,那么framlayout中的View就会越叠越多.
内存占用会过大,绘制也会变的很糟糕.对性能影响特别大

所以,启动一个新的fragment.最好把上一个hide起来.

Activity

    /**
     * 跳转Activity
     */
    public void startActivity(Class aClass) {
        Intent intent = new Intent(mContext, aClass);
        startActivity(intent);
    }

我一般喜欢在baseActivity中,写这种启动的函数.

因为大多数时候,没啥东西要传的.

不过现在,基本是用路由跳转了.

Kotlin

kotlin支持扩展函数,所以更方便了.


    fun Activity.startAt(clazz: Class<*>) {
        val intent = Intent(this, clazz)
        startActivity(intent)
    }

application

其实用application也是可以启动activity的

image.png

但是在application启动有个地方要注意,就是要加flag

  Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);

如果你去看ARoute的源码.

你就会发现


image.png image.png

暂时就想到这么多了.

您的喜欢与回复是我最大的动力-_-
交流群:493180098

上一篇 下一篇

猜你喜欢

热点阅读