@Override public void onHiddenChanged(boolean hidden) { super.onHidd...
如果您未打开项目,请在 Welcome to Android Studio 窗口中点击 Start a new Android Studio project ?...Activity 生命周期 相信不少朋友也已经看过这个流程图了,关于Activity生命周期的几个过程,我们简单说明如下 1.开始启动Activity,系统会先调用onCreate方法,然后调用onStart...onCreateView() —— 创建fragment中的视图的时候,调用这个方法。...onActivityCreated() —— 当activity的onCreate()方法被返回之后,调用这个方法。...onDestroyView() —— 当fragment中的视图被移除的时候,调用这个方法。 onDetach() —— 当fragment和activity分离的时候,调用这个方法。
Android显示屏开发程序,发现接入usb扫码枪后,页面就重新加载 经过网上查找资料,解决办法为在Manifest里该Activity增加 android:configChanges="screenSize...Configuration newConfig) { super.onConfigurationChanged(newConfig); } 但是,发现问题依然出现 解决办法:manifests的所有
的导航路线走 navController.navigate(R.id.action_fragmentA_to_fragmentB, args) 最后 , 在跳转后的界面中 , 调用 getArguments...Make " 选项 , 重新编译一下, 目的是为了 生成 FragmentBArgs.java 代码, 之后调用该自动生成的类 进行 传参 ; 生成的类在 " Navigation\app\build\...和 setAGE 分别设置 参数 , 再后 , 调用 FragmentBArgs.Builder#build() 函数 , 创建 FragmentBArgs 类型的 参数对象 , 最后 , 调用 FragmentBArgs...NavigationGraph ; I、MainActivity 页面布局 这是 主页面 Launcher Activity 的布局 , 之后的 Fragment 的 布局 就替换到 fragment...:defaultValue="12"/> 3、页面相关 Kotlin 代码 主要是 Activity 和 Fragment 代码 ; I、MainActivity
前言 最近断断续续地把项目的界面部分的代码由JAva改成了Kotlin编写,并且如果应用了kotlin-android-extensions插件,一个显而易见的好处是再也不用写 findViewById...*是kotlin-android-extensions插件自动生成的。下面我们来解析下原理。...并且创建一个 HashMap 进行View对象的缓存,避免每次调用 View 时都会重新调用findViewById()进行查找。...Fragment 再来看下Fragment中的使用: import android.os.Bundle import android.support.v4.app.Fragment import android.view.LayoutInflater...其他(动态布局) 除了Activity和Fragment,我们用的最多的UI布局当属Adapter了,kotlin-android-extensions也提供了对这一类动态布局的支持。
kotlin-android-extensions插件可能算得上是我最喜欢的一个Kotlin在Android上的特性了。...还有,虽然HashMap是一种O(1)时间复杂度的数据结构,但这毕竟只是理论上的时间复杂度,实际调用肯定是没有直接访问控件实例快的,因此kotlin-android-extensions插件也在无形当中降低了程序的运行效率...首先最核心的逻辑仍然是调用FragmentMainBinding的inflate()函数去加载fragment_main.xml布局文件,但由于这是在Fragment当中,所以使用了3个参数的inflate...好吧,这是我少有承认Java要比Kotlin更简洁的地方,因为使用Java代码去实现同样的功能只需要这样写: public class MainFragment extends Fragment {...首先,我们在onCreateViewHolder()函数中调用FruitItemBinding的inflate()函数去加载fruit_item.xml布局文件,这和ViewBinding在Fragment
在 Activity 或 Fragment 的 onCreate 方法中,将 ViewModelProvider 的调用修改为: //下面的 Kotlin 扩展需要依赖以下或更新新版本的 ktx 库:...您可以用 Activity 创建一个 ViewModel 实例,然后从这个 Activity 中的任一个 Fragment 中获得 ViewModel 的引用: // 在Fragment的 onCreate...ViewMode 与 Kotlin 协程: viewModelScope 于 Lifecycle 的 2.1.0 版本时加入 只支持 Kotlin Android 平台上的协程 通常情况下,我们使用回调...Kotlin 协程 (Coroutines) 同样适用于处理异步调用,它让逻辑变得简单的同时,也确保了操作不会阻塞主线程。...viewModelScope 是一个 ViewModel 的 Kotlin 扩展属性。正如前面所说,它能在 ViewModel 销毁时 (onCleared() 方法调用时) 退出。
序 自从 Google 宣布 Kotlin 为 Android 一等公民的身份后,大量的 Android 开发开始接触和使用 Kotlin,也体会到 Kotlin 在编码过程中的便捷和高效。...本文就这个问题,展开讨论 Kotlin 通过 View ID 访问 View 的原理,以及频繁调用 findViewById() 的问题。 二....Kotlin 干掉了 findViewById 2.1 如何使用? 想使用这个特性,还需要一些简单的配置,不过在 Android Studio 中,我们支持 Kotlin 的时候就已经自动配置完成。...apply plugin:'kotlin-android-extensions' 之后在访问的 Activity 或者 Fragment 中,还需要对布局进行 import,通常我们在首次使用该布局下的...这一步,也不需要显式的调用 findViewById()。 这有什么用呢? 例如在 Fragment 的 onCreateView() 中,一定不能操作布局内的控件吗?
,在 Activity 的 onCreate 方法调用时,对这些参数进行了注入,因此: @Override protected void onCreate(@Nullable Bundle savedInstanceState...或者 Fragment 添加注解,在启动或者显示相应的组件时,调用相应的方法来实现共享元素动画,让页面的跳转更加连贯。...支持 由于从 API 28 开始,Android 废弃了 android.app.Fragment 相关的 API,转而推荐使用 support-fragment,同时由于框架本身也需要监听 Fragment...的生命周期,因此我们对于 android.app.Fragment不予支持,请谅解。...最后在 Application 的 onCreate 当中调用: Tieguanyin.init(this); 即可。
插件 Android 框架中定义的大多数应用组件都具有生命周期。...通过调用 Lifecycle 的 addObserver() 方法传递进去一个你的观察对象即可,如下所示: Kotlin class MyObserver : LifecycleObserver {...处理停止事件 当生命周期属于 AppCompatActivity 或 Fragment 时,生命周期的状态更改为 CREATED ,并且在调用 AppCompatActivity 或 Fragment...当通过 onSaveInstanceState() 保存 Fragment 或 AppCompatActivity 的状态时,在调用 ON_START 之前,它的 UI 被认为是不可变的。...换句话说,Android 系统调用 onSaveInstanceState() ,但不一定调用 onStop() 。
前言 随着Google I/O大会的召开,Google宣布将支持Kotlin作为Android的开发语言,最近关于Kotlin的文章、介绍就异常的活跃。...这在使用 Kotlin 的 Android 应用程序而不是服务器应用程序中特别有用。对于 Android 应用,我们自然希望减少应用启动时间,以便用户更快地看到应用内容,而不是等待初始加载屏幕。...懒加载也是更有效率的内存,因为我们只需要调用资源才能将资源加载到内存中。...但有一些在 Android 中某些属性需要在 onCreate() 方法中初始化。...如果你没有使用 Kotlin 处理这个问题,你可能已经在 Android 中发现了 TextUtils 类。
iterator.next().isEnabled()) { return true; } } return false; } 入口方法:责任链上的每个回调方法仅在前面的回调处于未启用状态...首先,在 Fragment attach 时,会创建一个回调对象加入分发器,回调处理时弹出返回栈栈顶事务。不过初始状态是未启用,只有当事务添加进返回栈后,才会修改回调对象为启用状态。...一般情况下,“调用 moveTaskToBack()” 表现最佳,两个论点: 1、两次点击返回键的目的是挽回用户,确认用户真的需要退出。...因为这些 API 的表现并不理想: 1、当调用的 Activity 不位于栈顶时,杀死进程系统会立即重新启动 App(可能是系统认为 前台 App 是意外终止的,会自动重启); 2、当 App 退出后,...这里其实是使用了 ViewBinding + Kotlin 委托属性的视图绑定方案,相对于传统的 findViewById、ButterKnife、Kotlin Synthetics 等方案,这个方案从多个角度上表现更好
Fragment进行回收,适合页面较多的Fragment使用,这样就不会消耗更多的内存 4、Fragment生命周期 onAttach() onCreate() onCreateView() onActivityCreated...调用Activity中的方法:getActivity Activity调用Fragment中的方法:接口回调 Fragment调用Fragment中的方法:FragmentManager.findFragmentById...资源未关闭造成的内存泄漏:比如Socket、Broadcast、Cursor、Bitmap、ListView等,使用完后要关闭 AsyncTask造成的内存泄漏:由于非静态内部类持有匿名内部类的引用而造成内存泄漏...(“UnusedResources”)来忽视Lint的报错 自定义Lint检查,可以创建类,继承Detector和实现JavaPsiScanner 26 Kotlin面试题 1、什么是Kotlin Kotlin...是一种基于JVM的编程语言 对Java的一种拓展,比Java更简洁 Kotlin支持函数式编程 Kotlin类和Java类可以相互调用 2、Kotlin环境搭建 直接在Plugin中下载Kotlin插件即可
kotlin 的那个扩展,其实刚开始做项目的时候这个就已经废弃了,由于当时自己有点懒,没去学习这个新的代替方案,所以就成为一个历史遗留的问题,参考官方文档 view Binding 官方文档,这里只是针对目前使用的几个场景进行重构...,其他未涉及的场景可以同理得出。...二、环境的配置 Android Studio 的版本至少需要3.6及以上 在build.gradle 配置文件下添加以下语句,不过现在的版本貌似是默认启用view Binding android {...//生成类名 FragmentNameBinding binding自动调用布局里面的id也发生了一些变化,变成驼峰的命名法,同样会忽略掉非字母字符,举个例子 //布局里面某个控件的id android...,跟上面几种情况类似就不过多说明了 四、总结 总体来讲这次重构是比较成功的,以前使用kotlin扩展虽然方便但是还是比较容易出错,尤其是不同布局采用相同的id名时经常弄错,用了view binding
封装Extras 使用ExtrasDelegate来封装Extras import android.support.v4.app.Fragment import android.support.v7.app.AppCompatActivity...函数,在使用Kotlin高效地开发Android App(二)中已经讲述过,就不在重复讲述。...三. infix 中缀表达式是一种通用的算术或逻辑公式表示方法,操作符以中缀形式处于操作数的中间。中缀表达式允许我们使用一个单词或字母来当运算符用(其本质还是函数调用),忽略调用的点和圆括号。...即那些在函数体内会被访问的变量。 内存分配(对于函数对象和类)和虚拟调用会引入运行时间开销。 使用 inline 修饰的函数,可以从编译器角度将函数的函数体复制到调用处实现内联。...该系列的相关文章: 使用Kotlin高效地开发Android App(四) 使用Kotlin高效地开发Android App(三) 使用Kotlin高效地开发Android App(二) 使用Kotlin
(含Kotlin)[5] Android | Fragment 核心原理和面试题 (AndroidX 版本)[6] ---- 学习路线图 ---- 1....不会的, 未使用的类会在混淆时被压缩。 ---- 2. ViewBinding 的基本用法 这一节我们来介绍 ViewBinding 的使用方法,内容不多。...关于 Fragment 生命周期和事务在我之前的一篇文章里讨论过:[Android | Fragment 核心原理 & 面试题 (AndroidX 版本)](notion://www.notion.so...首先,我们梳理一下我们要委托的内容与需求,以及相应的解决办法: 需求 解决办法 需要委托 ViewBinding#bind() 的调用 反射 需要委托 binding = null 的调用 监听 Fragment...Fragment#requireView() 会返回 Fragment 的根节点,但要注意在 onCreateView() 之前调用 requireView() 会抛出异常; 问题 7、FragmentTestBinding
Android Jetpack 向后兼容,是为现代设计实践而设计的,如关注点分离、测试能力、松散耦合、观察者模式、控制翻转、Kotlin集成等生产力特性。...语言支持; AppCompat→ 帮助较低版本的Android系统进行兼容; Android KTX→ 基于Kotlin特性为Android、Jetpack提供一些简易易用的扩展; Multidex→...& Transition→ 内置动画及自定义动画效果; Emoji→ 即便用户没有更新Android系统也可以获取最新的表情符号; Auto(车)、TV、WearOS; Fragment→ 组件化界面的基本单位...普及,带来了扩展创建kotlin-android-extensions(KAE),直接拿id当控件用,原理: 类中定义一个存储控件引用的HashMap,id为key,控件实例为value,当用到控件时,...,可以利用Kotlin高阶函数,示例如下: [df188f56cb66147dc9e77711b30e0c53.png] 调用下: [599ce694daff7a90fbcb200a702f626e.png
基于Kotlin的扩展 近几年Android对Kotlin的支持,我们开始使用 Android Kotlin extensions。 在文件中导入布局文件直接引用viewId。...ViewBinding和Kotlin扩展 ViewBinding 和 Kotlin 扩展 都是 Android 开发中常用的技术,用于简化视图查找和绑定的过程。...Kotlin扩展: Kotlin扩展 是 Kotlin 语言的特性,其通过扩展函数的方式,允许开发者为现有的类添加新的函数或属性。...Kotlin扩展 对视图的数据获取和类型安全性没有提供直接的支持,需要手动处理可能的空指针异常和类型转换。 Kotlin扩展 会增加 APK 的大小,因为它是在运行时动态添加的函数。...总体而言 ViewBinding 在类型安全性和编译时错误检测方面比 Kotlin扩展 更好。 它是官方推荐的方式,并且可以避免一些潜在的运行时异常。
领取专属 10元无门槛券
手把手带您无忧上云