日更(十五)-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的
但是在application启动有个地方要注意,就是要加flag
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
如果你去看ARoute的源码.
你就会发现
image.png image.png
暂时就想到这么多了.
您的喜欢与回复是我最大的动力-_-
交流群:493180098