1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Jenly-AndroidKTXKotlin 工具類集合

        聯(lián)合創(chuàng)作 · 2023-09-24 21:05

        AndroidKTX 一個(gè)簡化 Android 開發(fā)的 Kotlin 工具類集合,通過 Kotlin 語法特性封裝一些好用的方法和功能,可以使代碼更加簡潔易讀,從而有效的提高開發(fā)效率。

        引入

        Gradle:

        1. 在Project的 build.gradle 里面添加遠(yuǎn)程倉庫
        allprojects {
            repositories {
                //...
                mavenCentral()
            }
        }
        1. 在Module的 build.gradle 里面添加引入依賴項(xiàng)
        // core-ktx(*必須)
        implementation 'com.github.jenly1314.AndroidKTX:core-ktx:1.0.0'
        // activity-ktx(可選)
        implementation 'com.github.jenly1314.AndroidKTX:activity-ktx:1.0.0'
        // fragment-ktx(可選)
        implementation 'com.github.jenly1314.AndroidKTX:fragment-ktx:1.0.0'
        

        示例

        下面介紹一些部分常用的功能:

        ActivityResultCaller 的 ActivityResultLauncher 使用示例(常在 Activity  Fragment 中使用)

            // 單個(gè)權(quán)限申請:只需在需要使用的地方調(diào)用:cameraPermissionLauncher.launch() 即可觸發(fā)回調(diào)
            private val cameraPermissionLauncher = requestPermissionLauncher(Manifest.permission.CAMERA) { granted ->
                showToast("granted = $granted")
                log(msg = "granted = $granted")
                if (granted) {
                    // 已授權(quán),則進(jìn)行拍照預(yù)覽
                    picturePreviewLauncher.launch()
                }
            }
            
            // 多個(gè)權(quán)限申請:只需在需要使用的地方調(diào)用:readWritePermissionLauncher.launch() 即可觸發(fā)回調(diào)
            private val readWritePermissionLauncher = requestMultiplePermissionsLauncher(
                arrayOf(
                    Manifest.permission.READ_EXTERNAL_STORAGE,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE
                )
            ) { allGranted, grantedPermissions, deniedPermissions ->
                showToast("allGranted = $allGranted")
                log(msg = "allGranted = $allGranted, grantedPermissions = $grantedPermissions, deniedPermissions = $deniedPermissions")
                if (allGranted) {
                    // 已全部授權(quán),則進(jìn)行選擇文件
                    documentLauncher.launch()
                }
            }
            
            // 拍照預(yù)覽
            private val picturePreviewLauncher = takePicturePreviewLauncher{
                binding.iv.setImageBitmap(it)
            }
            
            // 選擇文件 (類型:image/*)
            private val documentLauncher = openDocumentLauncher(arrayOf("image/*")){
                binding.iv.setImageURI(it)
            }
            
            // startActivityForResult:只需在需要使用的地方調(diào)用:startActivityLauncher.launch(intent) 即可觸發(fā)回調(diào)
            private val startActivityLauncher = startActivityForResultLauncher{
                log(msg = "resultCode = ${it.resultCode}")
                if(it.isResultOk()){
                    // 成功
                    showToast("Result Ok")
                }else{
                    showToast("Result Cancel")
                }
            }
        
         

        然后通過申明的 XXXLauncher 調(diào)用函數(shù) launch 即可

            // 如:cameraPermissionLauncher
            cameraPermissionLauncher.launch()
        
         
            //如:startActivityLauncher
            startActivityLauncher.launch(
                    intentOf(
                        SampleActivity::class.java,
                        "key1" to 2,
                        "key2" to "Start Activity For Result"
                    )
                )
         

        startActivity 使用示例(常在 Activity  Fragment 中使用)

            // 相當(dāng)于 startActivity(Intent(this, MainActivity::class.java))
            startActivity<MainActivity>()
         

            // 相當(dāng)于 startActivity(Intent(this, MainActivity::class.java))
            startActivity(MainActivity::class.java)
         

        或(帶傳遞參數(shù))

            // 相當(dāng)于 startActivity(Intent(this, MainActivity::class.java).putExtra("key1", 1).putExtra("key2", "Start Activity")
            startActivity(SampleActivity::class.java, "key1" to 1, "key2" to "Start Activity")
         

        然后在跳轉(zhuǎn)后的界面接收數(shù)據(jù)

        class SampleActivity : AppCompatActivity(R.layout.activity_sample) {
        
            // 懶加載:相當(dāng)于懶加載的方式獲取 getIntent().getExtras().get("key1"); 類型為:Int(有默認(rèn)值,可保證不為空,并通過默認(rèn)值的類型可自動(dòng)推斷出變量的類型)
            private val extra1 by lazyIntentExtra("key1", 0)
        
            // 屬性委托:相當(dāng)于 getIntent().getExtras().get("key2"); 類型為:String(有默認(rèn)值,可保證不為空)
            private val extra2 by intentExtra("key2", "")
        
        
        }
         

        Intent 的 intentExtra 使用示例(常在 Activity 中使用)

            // 屬性委托:相當(dāng)于 getIntent().getExtras().get("extra1"); 類型為:Int?
            private val extra1: Int? by intentExtra<Int>("extra1")
            
            // 屬性委托:相當(dāng)于 getIntent().getExtras().get("extra2"); 類型為:Int?(有申明類型時(shí),可以省略泛型)
            private val extra2: Int? by intentExtra("extra2")
            
            // 屬性委托:相當(dāng)于 getIntent().getExtras().get("extra3"); 類型為:Int?(有聲明泛型時(shí),可以省略類型)
            private val extra3 by intentExtra<Int>("extra3")
            
            // 屬性委托:相當(dāng)于 getIntent().getExtras().get("extra4"); 類型為:Int(有默認(rèn)值,可保證不為空)
            private val extra4: Int by intentExtra("extra4", 1)
            
            // 屬性委托:相當(dāng)于 getIntent().getExtras().get("extra5"); 類型為:Int(有默認(rèn)值,通過默認(rèn)值的類型可自動(dòng)推斷出變量的類型)
            private val extra5 by intentExtra("extra5", 1)
            
            // 屬性委托:相當(dāng)于 getIntent().getExtras().get("extra6"); 類型為:Int(key的默認(rèn)值如果忽略或?yàn)榭諘r(shí),則默認(rèn)值為變量的名稱)
            private val extra6 by intentExtra(defaultValue = 1)
            
            // 屬性委托:相當(dāng)于懶加載的方式獲取 getIntent().getExtras().get("extra7"); 類型為:Int?
            private val extra7: Int? by intentExtra()
            
            // 懶加載:相當(dāng)于懶加載的方式獲取 getIntent().getExtras().get("extra8"); 類型為:Int?
            private val extra8: Int? by lazyIntentExtra("extra8")
            
            // 懶加載:相當(dāng)于懶加載的方式獲取 getIntent().getExtras().get("extra9"); 類型為:Int(有默認(rèn)值,可保證不為空,并通過默認(rèn)值的類型可自動(dòng)推斷出變量的類型)
            private val extra9 by lazyIntentExtra("extra9", 1)
        
         

        Fragment 的 argument 使用示例(常在 Fragment 中使用)

            // 屬性委托:相當(dāng)于 fragment.getArguments().get("arg1"); 類型為:Int?
            private val arg1: Int? by argument<Int>("arg1")
        
            // 屬性委托:相當(dāng)于 fragment.getArguments().get("arg2"); 類型為:Int?(有申明類型時(shí),可以省略泛型)
            private val arg2: Int? by argument("arg2")
        
            // 屬性委托:相當(dāng)于 fragment.getArguments().get("arg3"); 類型為:Int?(有聲明泛型時(shí),可以省略類型)
            private val arg3 by argument<Int>("arg3")
        
            // 屬性委托:相當(dāng)于 fragment.getArguments().get("arg4"); 類型為:Int(有默認(rèn)值,可保證不為空)
            private val arg4: Int by argument("arg4", 1)
        
            // 屬性委托:相當(dāng)于 fragment.getArguments().get("arg5"); 類型為:Int(有默認(rèn)值,通過默認(rèn)值的類型可自動(dòng)推斷出變量的類型)
            private val arg5 by argument("arg5", 1)
        
            // 屬性委托:相當(dāng)于 fragment.getArguments().get("arg6"); 類型為:Int(key的默認(rèn)值如果忽略或?yàn)榭諘r(shí),則默認(rèn)值為變量的名稱)
            private val arg6 by argument(defaultValue = 1)
        
            // 屬性委托:相當(dāng)于懶加載的方式獲取 fragment.getArguments().get("arg7"); 類型為:Int?
            private val arg7: Int? by argument()
        
            // 懶加載:相當(dāng)于懶加載的方式獲取 fragment.getArguments().get("arg8"); 類型為:Int?
            private val arg8: Int? by lazyArgument("arg8")
        
            // 懶加載:相當(dāng)于懶加載的方式獲取 fragment.getArguments().get("arg9"); 類型為:Int(有默認(rèn)值,可保證不為空,并通過默認(rèn)值的類型可自動(dòng)推斷出變量的類型)
            private val arg9 by lazyArgument("arg9", 1)
        
        
         

        argument 主要使用場景示例

            class SampleFragment : Fragment() {
                
                // 屬性委托的方式傳遞參數(shù)
                private var argInt by argument(defaultValue = 0)
                private var argString: String? by argument()
                private var argBool by argument(defaultValue = false)
                
                companion object {
            
                    fun newInstance(argInt: Int, argString: String, isBool: Boolean): SampleFragment {
                        return SampleFragment().apply {
                            // 示例:屬性委托的方式傳遞參數(shù)
                            this.argInt = argInt
                            this.argString = argString
                            this.argBool = isBool
                        }
                    }
                }
                
                //...
                
            }
         

         

        瀏覽 19
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        編輯 分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        編輯 分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            欧美三级按摩 | 麻豆免费视频在线观看 | 日本久久精品 | 欧美丰满成熟性掹交XXXBBB | 日韩三级网址 | 操骚逼熟女 | 欧美成人AAAA | 肉体秘书hd日本在线观看 | 成人视频导航 | 亚洲特级黄色视频 |