日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Androidx ViewPager+Fragment 懒加载

發布時間:2024/9/30 Android 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Androidx ViewPager+Fragment 懒加载 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載請標明出處:http://blog.csdn.net/zhaoyanjun6/article/details/113545036
本文出自【趙彥軍的博客】

目錄

    • 前言
    • 懶加載(預加載)
    • 傳統模式
    • Androidx
    • 總結

前言

還有一個月就過年了,超級開心。
本文所有內容已經上傳至github:https://github.com/zyj1609wz/ViewPagerLazyLoad

懶加載(預加載)

懶加載字面意思就是當需要的時候才會去加載,不需要就不要加載。

以前處理 Fragment 的懶加載,我們通常會在 Fragment 中處理 setUserVisibleHint + onHiddenChanged 這兩個函數,而在 Androidx 模式下,我們可以使用 FragmentTransaction.setMaxLifecycle() 的方式來處理 Fragment 的懶加載。

fragment 生命周期:
onAttach -> onCreate -> onCreateView -> onViewCreated -> onActivityCreated -> onStart -> onResume

一般在 onCreate方法中接收 bundle 中的數據,在 onCreateView 創建 view初始化 布局。在 onActivityCreated或者 onResume做懶加載

傳統模式

package com.zhaoyanjun.mode1import android.os.Bundle import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroupabstract class BaseFragment : Fragment() {/*** 用戶是否可見*/protected var mIsVisibleToUser = false/*** view是否創建*/protected var mIsViewCreated = false/*** 是否是第一次加載*/protected var mIsFirstLoad = falseoverride fun onActivityCreated(savedInstanceState: Bundle?) {super.onActivityCreated(savedInstanceState)mIsViewCreated = trueif (mIsVisibleToUser) {firstLoad()}}/*** 懶加載模式下生效*/fun firstLoad() {if (mIsFirstLoad) {return}mIsFirstLoad = trueonFirstLoad()}/*** 懶加載的時候調用*/open fun onFirstLoad() {}override fun setUserVisibleHint(isVisibleToUser: Boolean) {super.setUserVisibleHint(isVisibleToUser)mIsVisibleToUser = isVisibleToUserif (mIsVisibleToUser && mIsViewCreated) {firstLoad()}}override fun onDestroyView() {mIsVisibleToUser = falsemIsViewCreated = falsemIsFirstLoad = falsesuper.onDestroyView()} }

使用 :

package com.zhaoyanjun.mode1import android.os.Bundle import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.TextView import com.zhaoyanjun.Rclass ContentFragment : BaseFragment() {private var param1: String? = nullprivate var rootView: View? = nullprivate var nameTv: TextView? = nulloverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)arguments?.let {param1 = it.getString(ARG_PARAM1)}}override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,savedInstanceState: Bundle?): View? {rootView = inflater.inflate(R.layout.fragment_content, container, false)nameTv = rootView?.findViewById(R.id.name)return rootView}//懶加載更新數據override fun onFirstLoad() {super.onFirstLoad()//第一次加載Log.d("zhaoyanjun-", "firstLoad index: $param1")nameTv?.text = param1}companion object {private const val ARG_PARAM1 = "param1"@JvmStaticfun newInstance(param1: String) =ContentFragment().apply {arguments = Bundle().apply {putString(ARG_PARAM1, param1)}}} }

Androidx

在使用 Androidx 的時候,會發現 FragmentPagerAdapter(fragmentManager) 方法過時了

取而代之的是 兩個參數的構造函數 。

public FragmentPagerAdapter(@NonNull FragmentManager fm,@Behavior int behavior) {mFragmentManager = fm;mBehavior = behavior; }

mBehavior 有兩個值:BEHAVIOR_SET_USER_VISIBLE_HINT 、BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT 。 默認情況下使用的是 BEHAVIOR_SET_USER_VISIBLE_HINT

從官方的注釋聲明中,我們能得到如下兩條結論:

  • 如果 behavior 的值為 BEHAVIOR_SET_USER_VISIBLE_HINT,那么當 Fragment 對用戶的可見狀態發生改變時,setUserVisibleHint 方法會被調用。
  • 如果 behavior 的值為 BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT ,那么當前選中的 Fragment在 Lifecycle.State#RESUMED 狀態 ,其他不可見的 Fragment 會被限制在Lifecycle.State#STARTED 狀態。

所以我的的懶加載方案就呼之欲出了:

package com.zhaoyanjun.mode2import androidx.fragment.app.Fragmentabstract class BaseFragment2 : Fragment() {private var isLoaded = falseoverride fun onResume() {super.onResume()//增加了Fragment是否可見的判斷if (!isLoaded && !isHidden) {isLoaded = trueonFirstLoad()}}override fun onDestroyView() {super.onDestroyView()isLoaded = false}open fun onFirstLoad() {} }

使用:

class ContentFragment2 : BaseFragment2() {private var param1: String? = nullprivate var rootView: View? = nullprivate var nameTv: TextView? = nulloverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)arguments?.let {param1 = it.getString(ARG_PARAM1)}}override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,savedInstanceState: Bundle?): View? {rootView = inflater.inflate(R.layout.fragment_content, container, false)nameTv = rootView?.findViewById(R.id.name)return rootView}override fun onFirstLoad() {super.onFirstLoad()//第一次加載Log.d("zhaoyanjun-mode2 ", "firstLoad index: $param1")nameTv?.text = param1}companion object {private const val ARG_PARAM1 = "param1"@JvmStaticfun newInstance(param1: String) =ContentFragment2().apply {arguments = Bundle().apply {putString(ARG_PARAM1, param1)}}}

總結

本文代碼已上傳至:https://github.com/zyj1609wz/ViewPagerLazyLoad

總結

以上是生活随笔為你收集整理的Androidx ViewPager+Fragment 懒加载的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产经典一区 | 免费拍拍拍网站 | 蜜桃视频在线播放 | 丰满少妇aaaaaa爰片毛片 | 国产日本在线播放 | 波多野结衣视频一区 | 日本高清不卡视频 | 毛片视频网站在线观看 | 性开放视频 | 色噜噜狠狠狠综合曰曰曰 | sesese99| 日韩小视频网站 | 日日撸夜夜撸 | 色呦呦网站 | 久久精品综合视频 | 国产观看 | 国产91热爆ts人妖在线 | 高清乱码毛片 | 久久久久久亚洲精品 | 一级特黄特色的免费大片视频 | a天堂视频在线观看 | 国产91专区 | 天天干天天弄 | 成人靠逼视频 | 午夜精品久久久久久毛片 | 国产精品久久久久久无人区 | 天天舔天天 | 麻豆一级片 | 91色国产 | 福利视频午夜 | 无码无遮挡又大又爽又黄的视频 | 黄色永久免费网站 | 在线成人免费 | 美女黄视频网站 | www.国产一区二区 | 对白刺激国产子与伦 | 给我看免费高清在线观看 | 国产超碰97| 污网站免费观看 | 免费在线看黄视频 | 日韩成人片| 欧美视频一二三 | 欧美日韩免费高清一区色橹橹 | 深夜成人在线观看 | 4438国产精品一区二区 | 欧美日韩成人精品 | 亚洲综合二区 | 超碰在线cao | 国产区精品在线观看 | 天天射寡妇| 欧美 日韩 国产 成人 在线观看 | 久久人妻精品白浆国产 | 亚洲狼人综合网 | 张柏芝亚洲一区二区三区 | 少妇一级淫片免费放2 | 成人国产精品一区 | 91九色在线视频 | 萌白酱在线观看 | 一级小毛片 | 国产伦精品一区二区免费 | 免费观看成人鲁鲁鲁鲁鲁视频 | 国内自拍视频在线播放 | 狠狠一区| 国产理论一区 | 国产人妻一区二区三区四区五区六 | 91精品国产一区二区三区 | www.毛片| 久久96视频 | 日韩青青草 | 一区二区三区视频播放 | 色哟哟精品观看 | 福利视频在线导航 | 亚洲第一视频网 | 2021狠狠操| 海量av资源| 爱爱中文字幕 | 性欧美极品另类 | 亚洲情热 | 久久九九视频 | 国产成人精品免费 | 国产精品免费av一区二区 | 天堂av亚洲av国产av电影 | 一区三区视频在线观看 | 中文字幕在线欧美 | 狠狠躁日日躁夜夜躁 | 高潮白浆女日韩av免费看 | 国产中文字幕在线视频 | 亚洲天堂一区二区三区四区 | 91快射 | 久视频在线 | 女生扒开尿口让男生桶 | 国产成人手机视频 | 激情视频一区二区三区 | 三级网站在线免费观看 | 榴莲视频黄色 | 国产亚洲av在线 | 麻豆免费在线观看视频 | www射| 强开乳罩摸双乳吃奶羞羞www |