├── .gitignore
├── .idea
├── codeStyles
│ ├── Project.xml
│ └── codeStyleConfig.xml
├── dictionaries
│ └── andy.xml
├── encodings.xml
├── gradle.xml
├── misc.xml
├── runConfigurations.xml
└── vcs.xml
├── README.md
├── app
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── com
│ │ └── jennifer
│ │ └── andy
│ │ └── androidxlazyload
│ │ └── ExampleInstrumentedTest.kt
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── com
│ │ │ └── jennifer
│ │ │ └── andy
│ │ │ └── androidxlazyload
│ │ │ ├── FragmentGenerater.kt
│ │ │ ├── LazyFragment.kt
│ │ │ ├── LogFragment.kt
│ │ │ ├── MainActivity.kt
│ │ │ ├── TraditionLazyFragment.kt
│ │ │ ├── demo
│ │ │ ├── adapter
│ │ │ │ ├── FragmentLazyPagerAdapter.kt
│ │ │ │ ├── FragmentLazyStateAdapter.kt
│ │ │ │ └── FragmentLazyStatePageAdapter.kt
│ │ │ ├── demo1
│ │ │ │ └── Activity1.kt
│ │ │ ├── demo2
│ │ │ │ └── Activity2.kt
│ │ │ ├── demo3
│ │ │ │ └── Activity3.kt
│ │ │ ├── demo4
│ │ │ │ └── Activity4.kt
│ │ │ ├── demo5
│ │ │ │ └── Activity5.kt
│ │ │ ├── demo6
│ │ │ │ └── Activity6.kt
│ │ │ └── demo7
│ │ │ │ └── Activity7.kt
│ │ │ ├── ext
│ │ │ └── ShowHideExt.kt
│ │ │ └── fragment
│ │ │ ├── AFragment.kt
│ │ │ ├── BFragment.kt
│ │ │ ├── CFragment.kt
│ │ │ ├── FourFragment.kt
│ │ │ ├── OneFragment.kt
│ │ │ ├── TextFragment.kt
│ │ │ ├── ThreeFragment.kt
│ │ │ └── TwoFragment.kt
│ └── res
│ │ ├── drawable-v24
│ │ └── ic_launcher_foreground.xml
│ │ ├── drawable
│ │ └── ic_launcher_background.xml
│ │ ├── layout
│ │ ├── activity_1.xml
│ │ ├── activity_2.xml
│ │ ├── activity_3.xml
│ │ ├── activity_4.xml
│ │ ├── activity_5.xml
│ │ ├── activity_6.xml
│ │ ├── activity_7.xml
│ │ ├── activity_main.xml
│ │ ├── fragment_a.xml
│ │ ├── fragment_b.xml
│ │ ├── fragment_c.xml
│ │ ├── fragment_four.xml
│ │ └── fragment_text.xml
│ │ ├── mipmap-anydpi-v26
│ │ ├── ic_launcher.xml
│ │ └── ic_launcher_round.xml
│ │ ├── mipmap-hdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-mdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxxhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ └── values
│ │ ├── colors.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── test
│ └── java
│ └── com
│ └── jennifer
│ └── andy
│ └── androidxlazyload
│ └── ExampleUnitTest.kt
├── build.gradle
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea/caches
5 | /.idea/libraries
6 | /.idea/modules.xml
7 | /.idea/workspace.xml
8 | /.idea/navEditor.xml
9 | /.idea/assetWizardSettings.xml
10 | .DS_Store
11 | /build
12 | /captures
13 | .externalNativeBuild
14 | .cxx
15 |
--------------------------------------------------------------------------------
/.idea/codeStyles/Project.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | xmlns:android
20 |
21 | ^$
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | xmlns:.*
31 |
32 | ^$
33 |
34 |
35 | BY_NAME
36 |
37 |
38 |
39 |
40 |
41 |
42 | .*:id
43 |
44 | http://schemas.android.com/apk/res/android
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 | .*:name
54 |
55 | http://schemas.android.com/apk/res/android
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 | name
65 |
66 | ^$
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 | style
76 |
77 | ^$
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 | .*
87 |
88 | ^$
89 |
90 |
91 | BY_NAME
92 |
93 |
94 |
95 |
96 |
97 |
98 | .*
99 |
100 | http://schemas.android.com/apk/res/android
101 |
102 |
103 | ANDROID_ATTRIBUTE_ORDER
104 |
105 |
106 |
107 |
108 |
109 |
110 | .*
111 |
112 | .*
113 |
114 |
115 | BY_NAME
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
--------------------------------------------------------------------------------
/.idea/codeStyles/codeStyleConfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/.idea/dictionaries/andy.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
18 |
19 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | Android
12 |
13 |
14 | Android > Lint > Correctness
15 |
16 |
17 | Android > Lint > Internationalization
18 |
19 |
20 | Android > Lint > Security
21 |
22 |
23 | Android > Lint > Usability
24 |
25 |
26 | C/C++
27 |
28 |
29 | Code maturity issuesJava
30 |
31 |
32 | Code style issuesJava
33 |
34 |
35 | Control FlowGroovy
36 |
37 |
38 | Control flow issuesJava
39 |
40 |
41 | Data flow issuesGroovy
42 |
43 |
44 | Error handlingJava
45 |
46 |
47 | General
48 |
49 |
50 | GeneralC/C++
51 |
52 |
53 | Groovy
54 |
55 |
56 | J2ME issuesJava
57 |
58 |
59 | Java
60 |
61 |
62 | Java language level issuesJava
63 |
64 |
65 | Java language level migration aidsJava
66 |
67 |
68 | Javadoc issuesJava
69 |
70 |
71 | Memory issuesJava
72 |
73 |
74 | Performance issuesJava
75 |
76 |
77 | Portability issuesJava
78 |
79 |
80 | Potentially confusing code constructsGroovy
81 |
82 |
83 | Probable bugsGroovy
84 |
85 |
86 | Probable bugsJava
87 |
88 |
89 | Security issuesJava
90 |
91 |
92 | Threading issuesGroovy
93 |
94 |
95 | Threading issuesJava
96 |
97 |
98 | Unused codeC/C++
99 |
100 |
101 | Validity issuesGroovy
102 |
103 |
104 |
105 |
106 | Android
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
--------------------------------------------------------------------------------
/.idea/runConfigurations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # AndroidxLazyLoad
2 |
3 | AndroidxLazyLoad 是 Androidx 模式下 Fragment 懒加载的新实现,通过使用 `FragmentTransaction.setMaxLifecycle()` 方法来控制 Fragment 可调用的最大生命周期函数。
4 |
5 | 该项目中包含以下Fragment的使用场景
6 |
7 | - ViewPager + FragmentPagerAdapter
8 | - ViewPager + FragmentStatePagerAdapter
9 | - Activity + Fragment
10 | - Fragment + Fragment(嵌套模式)
11 | - 复杂 Fragment 嵌套 (上述4种场景的各种组合)
12 | - ViewPager2 + Fragment
13 |
14 | ## 如何使用?
15 |
16 | 使用该方案,你需要进行如下三步修改。
17 |
18 | ### 修改你的 ViewPager 适配器
19 |
20 | 在你的 ViewPager 适配器中增加如下参数:
21 |
22 | ```kotin
23 | FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)
24 |
25 | FragmentStatePagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)
26 | ```
27 |
28 | ### 修改你的 add+show+hide 方法
29 |
30 | - 将需要显示的 Fragment ,在调用 add 或 show 方法后,`setMaxLifecycle(showFragment, Lifecycle.State.RESUMED)`
31 | - 将需要隐藏的 Fragment ,在调用 hide 方法后,`setMaxLifecycle(fragment, Lifecycle.State.STARTED)`
32 |
33 | 如下所示:
34 |
35 | ```kotlin
36 | /**
37 | * 使用add+show+hide模式加载fragment
38 | *
39 | * 默认显示位置[showPosition]的Fragment,最大Lifecycle为Lifecycle.State.RESUMED
40 | * 其他隐藏的Fragment,最大Lifecycle为Lifecycle.State.STARTED
41 | *
42 | *@param containerViewId 容器id
43 | *@param showPosition fragments
44 | *@param fragmentManager FragmentManager
45 | *@param fragments 控制显示的Fragments
46 | */
47 | private fun loadFragmentsTransaction(
48 | @IdRes containerViewId: Int,
49 | showPosition: Int,
50 | fragmentManager: FragmentManager,
51 | vararg fragments: Fragment
52 | ) {
53 | if (fragments.isNotEmpty()) {
54 | fragmentManager.beginTransaction().apply {
55 | for (index in fragments.indices) {
56 | val fragment = fragments[index]
57 | add(containerViewId, fragment, fragment.javaClass.name)
58 | if (showPosition == index) {
59 | setMaxLifecycle(fragment, Lifecycle.State.RESUMED)
60 | } else {
61 | hide(fragment)
62 | setMaxLifecycle(fragment, Lifecycle.State.STARTED)
63 | }
64 | }
65 |
66 | }.commit()
67 | } else {
68 | throw IllegalStateException(
69 | "fragments must not empty"
70 | )
71 | }
72 | }
73 |
74 | /** 显示需要显示的Fragment[showFragment],并设置其最大Lifecycle为Lifecycle.State.RESUMED。
75 | * 同时隐藏其他Fragment,并设置最大Lifecycle为Lifecycle.State.STARTED
76 | * @param fragmentManager
77 | * @param showFragment
78 | */
79 | private fun showHideFragmentTransaction(fragmentManager: FragmentManager, showFragment: Fragment) {
80 | fragmentManager.beginTransaction().apply {
81 | show(showFragment)
82 | setMaxLifecycle(showFragment, Lifecycle.State.RESUMED)
83 |
84 | //获取其中所有的fragment,其他的fragment进行隐藏
85 | val fragments = fragmentManager.fragments
86 | for (fragment in fragments) {
87 | if (fragment != showFragment) {
88 | hide(fragment)
89 | setMaxLifecycle(fragment, Lifecycle.State.STARTED)
90 | }
91 | }
92 | }.commit()
93 | }
94 | ```
95 |
96 | 完整代码请点击--->[ShowHideExt](https://github.com/AndyJennifer/AndroidxLazyLoad/blob/master/app/src/main/java/com/jennifer/andy/androidxlazyload/ext/ShowHideExt.kt)
97 |
98 | ### 创建你的懒加载Fragment
99 |
100 | ```kotlin
101 | abstract class LazyFragment : LogFragment() {
102 |
103 | private var isLoaded = false
104 |
105 | override fun onResume() {
106 | super.onResume()
107 | if (!isLoaded && !isHidden) {
108 | lazyInit()
109 | Log.d(TAG, "lazyInit:!!!!!!!")
110 | isLoaded = true
111 | }
112 | }
113 |
114 | override fun onDestroyView() {
115 | super.onDestroyView()
116 | isLoaded = false
117 | }
118 |
119 | abstract fun lazyInit()
120 | }
121 | ```
122 |
123 | ## 使用该方案的优缺点
124 |
125 | - 优点:`在非特殊的情况下(缺点1)`,只有实际的可见 Fragment,其 `onResume` 方法才会被调用,这样才符合方法设计的初衷。
126 | - 缺点:
127 | 1. 对于 Fragment 的嵌套,及时使用了 `setMaxLifecycle` 方法。同级不可见的Fragment, 仍然要调用 `onResume` 方法。
128 | 2. 需要在原有的 add+show+hide 方法中,继续调用 setMaxLifecycle 方法来控制Fragment 的最大生命状态。
129 |
130 | ## 更多 👏
131 |
132 | 如果你想了解其中的原理,你可以阅读该文章:
133 |
134 | - [Androidx下Fragment的懒加载](https://andyjennifer.com/2020/01/19/Androidx下Fragment的懒加载/)
135 |
136 | ## 最后
137 |
138 | 如果你觉得项目不错,欢迎点击 star ❤️或 follow,也可以帮忙分享给你更多的朋友。你的支持与鼓励是给我继续做好该项目的最大动力。
139 |
140 | ## 联系我
141 |
142 | - QQ:443696320
143 | - 简书:[AndyandJennifer](https://www.jianshu.com/users/921c778fb5e1/timeline)
144 | - 掘金:[AndyandJennifer](https://juejin.im/user/5acc1ea06fb9a028bc2e0fc1)
145 | - Email: [andyjennifer@126.com](andyjennifer@126.com)
146 |
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | apply plugin: 'kotlin-android'
4 |
5 | apply plugin: 'kotlin-android-extensions'
6 |
7 | android {
8 | compileSdkVersion 29
9 | buildToolsVersion "29.0.2"
10 | defaultConfig {
11 | applicationId "com.jennifer.andy.androidxlazyload"
12 | minSdkVersion 21
13 | targetSdkVersion 29
14 | versionCode 1
15 | versionName "1.0"
16 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
17 | }
18 | buildTypes {
19 | release {
20 | minifyEnabled false
21 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
22 | }
23 | }
24 | }
25 |
26 | dependencies {
27 | implementation fileTree(dir: 'libs', include: ['*.jar'])
28 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
29 | implementation 'androidx.appcompat:appcompat:1.1.0'
30 | implementation 'androidx.core:core-ktx:1.0.2'
31 | implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
32 | implementation 'androidx.viewpager2:viewpager2:1.0.0'
33 | implementation 'com.google.android.material:material:1.1.0-beta02'
34 | testImplementation 'junit:junit:4.12'
35 | androidTestImplementation 'androidx.test.ext:junit:1.1.1'
36 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
37 | }
38 |
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
--------------------------------------------------------------------------------
/app/src/androidTest/java/com/jennifer/andy/androidxlazyload/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package com.jennifer.andy.androidxlazyload
2 |
3 | import androidx.test.platform.app.InstrumentationRegistry
4 | import androidx.test.ext.junit.runners.AndroidJUnit4
5 |
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | import org.junit.Assert.*
10 |
11 | /**
12 | * Instrumented test, which will execute on an Android device.
13 | *
14 | * See [testing documentation](http://d.android.com/tools/testing).
15 | */
16 | @RunWith(AndroidJUnit4::class)
17 | class ExampleInstrumentedTest {
18 | @Test
19 | fun useAppContext() {
20 | // Context of the app under test.
21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
22 | assertEquals("com.jennifer.andy.androidxlazyload", appContext.packageName)
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/app/src/main/java/com/jennifer/andy/androidxlazyload/FragmentGenerater.kt:
--------------------------------------------------------------------------------
1 | package com.jennifer.andy.androidxlazyload
2 |
3 | import androidx.fragment.app.Fragment
4 | import com.jennifer.andy.androidxlazyload.fragment.*
5 |
6 |
7 | const val FRAGMENT_ONE = "fragment_one"
8 | const val FRAGMENT_TWO = "fragment_two"
9 | const val FRAGMENT_THREE = "fragment_three"
10 |
11 | const val FRAGMENT_A = "fragment_a"
12 | const val FRAGMENT_B = "fragment_b"
13 | const val FRAGMENT_C = "fragment_c"
14 |
15 | /**
16 | * 获取OneFragment、TwoFragment、ThreeFragment,该集合中的fragment不包含嵌套。
17 | */
18 | fun generate123Fragments() = mapOf(
19 | FRAGMENT_ONE to OneFragment.newInstance(FRAGMENT_ONE),
20 | FRAGMENT_TWO to TwoFragment.newInstance(FRAGMENT_TWO),
21 | FRAGMENT_THREE to ThreeFragment.newInstance(FRAGMENT_THREE)
22 | )
23 |
24 | /**
25 | * 获取OneFragment、TwoFragment、ThreeFragment的Title
26 | */
27 | fun generate123FragmentTitles() = mutableListOf().apply {
28 | add(FRAGMENT_ONE)
29 | add(FRAGMENT_TWO)
30 | add(FRAGMENT_THREE)
31 | }
32 |
33 |
34 | /**
35 | * 获取AFragment、BFragment、CFragment
36 | */
37 | fun generateABCFragments() = mapOf(
38 | FRAGMENT_A to AFragment.newInstance(),
39 | FRAGMENT_B to BFragment.newInstance(),
40 | FRAGMENT_C to CFragment.newInstance()
41 | )
42 |
43 | /**
44 | * 获取AFragment、BFragment、CFragment的Title
45 | */
46 | fun generateABCFragmentTitles() = mutableListOf().apply {
47 | add(FRAGMENT_A)
48 | add(FRAGMENT_B)
49 | add(FRAGMENT_C)
50 | }
51 |
52 | /**
53 | * 构建多个TextFragment
54 | */
55 | fun generateTextFragments(amount: Int) = mutableListOf().apply {
56 | for (i in 0..amount) {
57 | add(TextFragment.newInstance("Fragment:${i+1}"))
58 | }
59 | }
60 |
61 |
62 | /**
63 | * 构建多个TextFragment的Title
64 | */
65 | fun generateTextFragmentTitles(amount: Int) = mutableListOf().apply {
66 | for (i in 0..amount) {
67 | add("Fragment:${i+1}")
68 | }
69 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/jennifer/andy/androidxlazyload/LazyFragment.kt:
--------------------------------------------------------------------------------
1 | package com.jennifer.andy.androidxlazyload
2 |
3 | import android.util.Log
4 |
5 |
6 | /**
7 | * Author: andy.xwt
8 | * Date: 2020-01-14 14:44
9 | * Description: Androidx 下支持栏加载的fragment
10 | */
11 |
12 | abstract class LazyFragment : LogFragment() {
13 |
14 | private var isLoaded = false
15 |
16 | override fun onResume() {
17 | super.onResume()
18 | if (!isLoaded && !isHidden) {
19 | lazyInit()
20 | Log.d(TAG, "lazyInit:!!!!!!!")
21 | isLoaded = true
22 | }
23 | }
24 |
25 | override fun onDestroyView() {
26 | super.onDestroyView()
27 | isLoaded = false
28 | }
29 |
30 | abstract fun lazyInit()
31 |
32 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/jennifer/andy/androidxlazyload/LogFragment.kt:
--------------------------------------------------------------------------------
1 | package com.jennifer.andy.androidxlazyload
2 |
3 | import android.content.Context
4 | import android.os.Bundle
5 | import android.util.Log
6 | import android.view.LayoutInflater
7 | import android.view.View
8 | import android.view.ViewGroup
9 | import androidx.fragment.app.Fragment
10 |
11 |
12 | /**
13 | * Author: andy.xwt
14 | * Date: 2020-01-14 18:29
15 | * Description: 负责打印日志的Fragment基类
16 | */
17 |
18 | open class LogFragment : Fragment() {
19 |
20 | protected var TAG = javaClass.simpleName
21 |
22 | override fun onAttach(context: Context) {
23 | super.onAttach(context)
24 | Log.d(TAG, "onAttach: ")
25 | }
26 |
27 | override fun onCreate(savedInstanceState: Bundle?) {
28 | super.onCreate(savedInstanceState)
29 | Log.d(TAG, "onCreate: ")
30 | }
31 |
32 |
33 | override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
34 | super.onViewCreated(view, savedInstanceState)
35 | Log.d(TAG, "onViewCreated: ")
36 | }
37 |
38 | override fun onCreateView(
39 | inflater: LayoutInflater,
40 | container: ViewGroup?,
41 | savedInstanceState: Bundle?
42 | ): View? {
43 | Log.d(TAG, "onCreateView: ")
44 | return super.onCreateView(inflater, container, savedInstanceState)
45 | }
46 |
47 |
48 | override fun onActivityCreated(savedInstanceState: Bundle?) {
49 | super.onActivityCreated(savedInstanceState)
50 | Log.d(TAG, "onActivityCreated: ")
51 | }
52 |
53 | override fun onStart() {
54 | super.onStart()
55 | Log.d(TAG, "onStart: ")
56 | }
57 |
58 | override fun onResume() {
59 | super.onResume()
60 | Log.d(TAG, "onResume: ")
61 | }
62 |
63 | override fun onPause() {
64 | super.onPause()
65 | Log.d(TAG, "onPause: ")
66 | }
67 |
68 | override fun onStop() {
69 | super.onStop()
70 | Log.d(TAG, "onStop: ")
71 | }
72 |
73 | override fun onDestroyView() {
74 | super.onDestroyView()
75 | Log.d(TAG, "onDestroyView: ")
76 | }
77 |
78 | override fun onDetach() {
79 | super.onDetach()
80 | Log.d(TAG, "onDetach: ")
81 | }
82 |
83 | override fun onHiddenChanged(hidden: Boolean) {
84 | super.onHiddenChanged(hidden)
85 | Log.d(TAG, "onHiddenChanged:hidden-->$hidden")
86 | }
87 |
88 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/jennifer/andy/androidxlazyload/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.jennifer.andy.androidxlazyload
2 |
3 | import android.content.Intent
4 | import android.os.Bundle
5 | import android.view.View
6 | import android.widget.Button
7 | import androidx.appcompat.app.AppCompatActivity
8 | import com.jennifer.andy.androidxlazyload.demo.demo1.Activity1
9 | import com.jennifer.andy.androidxlazyload.demo.demo2.Activity2
10 | import com.jennifer.andy.androidxlazyload.demo.demo3.Activity3
11 | import com.jennifer.andy.androidxlazyload.demo.demo4.Activity4
12 | import com.jennifer.andy.androidxlazyload.demo.demo5.Activity5
13 | import com.jennifer.andy.androidxlazyload.demo.demo6.Activity6
14 | import com.jennifer.andy.androidxlazyload.demo.demo7.Activity7
15 |
16 | class MainActivity : AppCompatActivity(), View.OnClickListener {
17 |
18 | override fun onCreate(savedInstanceState: Bundle?) {
19 | super.onCreate(savedInstanceState)
20 | setContentView(R.layout.activity_main)
21 | findViewById