而Android的打包,是Google写的一个Gradle插件。 gradle在做什么 编译好的代码,只是一堆散装的.jar 、.so 、.xml文件。要将它们以正确的目录结构,合并成一个apk。...apk打包流程 小结 在Android开发中,很多情况下,我们的逻辑并不能写在代码中。因为无用的分支和资源,将产生额外的APK大小。...未来的Android开发,会越来越倾向于,以SDK作为零件,项目则主要进行组装。Gradle就是这个组装过程的核心技术。所以学好Gradle对Android开发来说,还是非常重要的。
* * If the back stack is empty, no events get dispatched....mDrawerLayoutWeakReference.get() : null; if (mDrawerLayoutWeakReference !...>) tag).get(); } else if (tag instanceof NavController) { controller = (NavController...destination, @Nullable Bundle arguments) { NavigationView view = weakReference.get...NavDestination findNode(@IdRes int resid, boolean searchParents) { NavDestination destination = mNodes.get
An easy way to get system available features. 1 2 3 4 5 6 7 private void dumpSystemFeatures() {...The Other way You can also use adb shell to get into the shell of your device and the use pm list features...to get the available features of a device. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22...:android.hardware.usb.host feature:android.hardware.wifi feature:android.hardware.wifi.direct feature...:android.software.live_wallpaper feature:android.software.sip feature:android.software.sip.voip feature
本文记录下在Android平台上如何获取那些系统性能相关的数据。 1. CPU平均负载 读取文件节点/proc/loadavg,分别是1min/5min/15min内CPU的负载情况。...irq (6) 从系统启动开始累计到当前时刻,硬中断时间(单位:jiffies) softirq (357) 从系统启动开始累计到当前时刻,软中断时间(单位:jiffies) 上面结果中的后面三个数据在Android...不过庆幸的是Android系统源码中有一个LoadAverageService,这个service也就是开发者选项中显示CPU使用情况的内部实现,它的代码非常具有参考价值,我们可以在它的基础上进行扩展开发自己的工具
> android="http://schemas.android.com/apk/res/android"> <item android:id="@+id...对象,只不过它是继承自NavController的,戳进去构造方法,发现调用了父类的构造方法,再戳进去来到了NavController的构造方法, public NavController(@NonNull...extends Navigator> navigatorClass) { String name = sAnnotationNames.get(navigatorClass);...class.java.getDeclaredField("mBackStack") field.isAccessible = true mBackStack = field.get...extends NavDestination> navigator = mNavigators.get(name); if (navigator == null) { throw
> android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com...> android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com.../apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com...if (tag instanceof WeakReference) { controller = ((WeakReferenceNavController>) tag).get...,所以就是NavController。
nav_host_fragment" android:name="androidx.navigation.fragment.NavHostFragment" android.../apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com...android:id="@+id/homeFragment" android:name="com.yhj.jetpackstudy.ui.home.HomeFragment"...<fragment android:id="@+id/navigation_home" android:name="com.yhj.life.LifeFragment"...mBackStack"); field.setAccessible(true); mBackStack = (ArrayDeque) field.get
@SuppressWarnings("unchecked") @NonNull public String getNAME() { return (String) arguments.get...("NAME"); } @SuppressWarnings("unchecked") public int getAGE() { return (int) arguments.get...result = new Bundle(); if (arguments.containsKey("NAME")) { String NAME = (String) arguments.get...); } @SuppressWarnings("unchecked") public int getAGE() { return (int) arguments.get...完成 // 对应的就是 navController 实例变量 val navController = findNavController(this, R.id.fragment
, true); } }); navController.addOnNavigatedListener(new NavController.OnNavigatedListener...可以通过 NavController 的 navigateUp 方法主动退出。 修改 fragment_notification.xml 为 <?...修改代码为 class NotificationFragment : Fragment() { lateinit var navController : NavController...{ navController = NavHostFragment.findNavController(this@NotificationFragment) return...::class.java.getDeclaredField("mBackStack").apply { isAccessible = true }.get(navController
="http://schemas.android.com/apk/res/android" android:id="@+id/mobile_navigation" app:startDestination...="@+id/navigation_home"> <fragment android:id="@+id/navigation_home" android:name...(xxx) } boolean onNavDestinationSelected(MenuItem item,NavController navController) { //导航 navController.navigate...(item.getItemId(), null, options); } 来到NavController, //NavController.java //省略调用链来到 void navigate(NavDestination...参考文章 掘金-Android官方架构组件Navigation:大巧不工的Fragment管理框架
在 Activity 中通过 调用 findNavController 函数 , 获取 NavController , 然后通过该 NavController 变量进行导航 ; fragmentContainerView...组件的 管理 操作通过 NavController 完成 ; // fragmentContainerView 组件的 管理 操作通过 NavController 完成...// 对应的就是 navController 实例变量 val navController = findNavController(this, R.id.fragment)...组件的 管理 操作通过 NavController 完成 ; // fragmentContainerView 组件的 管理 操作通过 NavController 完成...// 对应的就是 navController 实例变量 val navController = findNavController(this, R.id.fragment)
使用NavController val navController = (childFragmentManager.findFragmentById(R.id.module_fragment_container...) as NavHostFragment).navController //跳转 navController.navigate(R.id.mainFragment) 一些具体参数和用法: navGraph...字面意思就是导航控制器,NavController可以控制跳转、返回、动画、监听等操作。...= (childFragmentManager.findFragmentById(R.id.module_fragment_container) as NavHostFragment).navController...android:label="FragmentCollection" /> 在底部状态切换的时候直接切换Fragment就行了: val navController
; public class MainActivity extends AppCompatActivity { private NavController navController;...将ActionBar与NavController绑定 NavigationUI.setupActionBarWithNavController(this, navController);...} } 在fragment中设置一个点击事件,使用NavController进行fragment跳转,通过内部任意一个View就能获取NavController对象 HomeFragment...对象 NavController navController = Navigation.findNavController(view);...对象 NavController navController = Navigation.findNavController(view);
获取 NavController navController = Navigation.findNavController(this, R.id.fragmentContainerView...*/ navController: NavController, navDestination: NavDestination, bundle: Bundle?...import android.util.Log import android.view.Menu import android.view.MenuItem import androidx.navigation.NavController...获取 NavController navController = Navigation.findNavController(this, R.id.fragmentContainerView...*/ navController: NavController, navDestination: NavDestination, bundle: Bundle?
(NavController.java:233) at androidx.navigation.ui.NavigationUI.setupActionBarWithNavController...(navController, appBarConfiguration) 报错信息 : Caused by: java.lang.NullPointerException: Attempt to invoke...(NavController.java:233) at androidx.navigation.ui.NavigationUI.setupActionBarWithNavController...: NavController, configuration: AppBarConfiguration = AppBarConfiguration(navController.graph) )..., appBarConfiguration) navView.setupWithNavController(navController) } } 运行效果如下 :
nav_fragment as NavHostFragment NavigationUI.setupWithNavController(navigation, navHostFragment.navController...setSupportActionBar(toolbar) NavigationUI.setupWithNavController(toolbar, navHostFragment.navController...) // 关联 Toolbar 和 NavController } // 重写方法,按下 Toolbar 的返回键弹出一个 Fragment override fun onSupportNavigateUp...navigation_drawer.gif 监听 在 NavController 上 addOnNavigatedListener() 添加一个 OnNavigatedListener。...navController.addOnNavigatedListener { _, destination -> // 切换到了哪个 destination,参数 destination 就是哪个
上篇文章Android-Jetpack笔记-Navigation之Fragment使用提到,每次切换目的地,fragment是反复销毁重建的,按照谷歌推荐的1个APP只需1个activity的思路开发,...Jetpack笔记代码 本文源码基于SDK 29,IDE是Android studio 3.5.3 解决 给上篇文章的项目加些日志,从面板页切到通知页,再从通知页切回面板页,查看日志, ?...("mBackStack"); field.setAccessible(true); mBackStack = (ArrayDeque) field.get...fragment = getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment); //获取导航控制器 NavController...navController = NavHostFragment.findNavController(fragment); //创建自定义的Fragment导航器 FixFragmentNavigator
可以轻松地跳转到不同的目的地 , 并处理回退操作 ; 切换 Fragment 显示流程 : 使用 NavController 组件 切换 Fragment , 设置 要跳转的 定义在 Navigation...Graph 中定义的 Fragment ; NavController 组件 会将 指定的 Fragment 显示到 NavHostFragment 组件中 ; 四、Navigation 使用流程 -...通过 调用 findNavController 函数 , 获取 NavController , 然后通过该 NavController 变量进行导航 ; // fragmentContainerView...组件的 管理 操作通过 NavController 完成 // 对应的就是 navController 实例变量 val navController = findNavController...(this, R.id.fragment) NavigationUI.setupActionBarWithNavController(this, navController)