<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Jenly-AndroidKTXKotlin 工具類集合

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

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

          引入

          Gradle:

          1. 在Project的 build.gradle 里面添加遠(yuǎn)程倉庫
          allprojects {
              repositories {
                  //...
                  mavenCentral()
              }
          }
          1. 在Module的 build.gradle 里面添加引入依賴項
          // 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 中使用)

              // 單個權(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()
                  }
              }
              
              // 多個權(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)值的類型可自動推斷出變量的類型)
              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?(有申明類型時,可以省略泛型)
              private val extra2: Int? by intentExtra("extra2")
              
              // 屬性委托:相當(dāng)于 getIntent().getExtras().get("extra3"); 類型為:Int?(有聲明泛型時,可以省略類型)
              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)值的類型可自動推斷出變量的類型)
              private val extra5 by intentExtra("extra5", 1)
              
              // 屬性委托:相當(dāng)于 getIntent().getExtras().get("extra6"); 類型為:Int(key的默認(rèn)值如果忽略或為空時,則默認(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)值的類型可自動推斷出變量的類型)
              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?(有申明類型時,可以省略泛型)
              private val arg2: Int? by argument("arg2")
          
              // 屬性委托:相當(dāng)于 fragment.getArguments().get("arg3"); 類型為:Int?(有聲明泛型時,可以省略類型)
              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)值的類型可自動推斷出變量的類型)
              private val arg5 by argument("arg5", 1)
          
              // 屬性委托:相當(dāng)于 fragment.getArguments().get("arg6"); 類型為:Int(key的默認(rèn)值如果忽略或為空時,則默認(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)值的類型可自動推斷出變量的類型)
              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
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天射天玩天天日 | 老肥骚逼| 亚洲色播免费视频 | av在线视屏 | 亚洲xxxxx |