Android KTX بخشی از Android Jetpack .
Android KTX مجموعهای از برنامههای افزودنی Kotlin است که همراه با Android Jetpack و سایر کتابخانههای اندروید موجود است. پسوندهای KTX کوتلین مختصر و اصطلاحی را به Jetpack، پلتفرم اندروید و سایر APIها ارائه می دهند. برای انجام این کار، این برنامه های افزودنی از چندین ویژگی زبان Kotlin استفاده می کنند، از جمله موارد زیر:
- توابع پسوند
- ویژگی های پسوند
- لامبدا
- پارامترهای نامگذاری شده
- مقادیر پیش فرض پارامتر
- کوروتین ها
به عنوان مثال، هنگام کار با SharedPreferences
، قبل از اینکه بتوانید در داده های تنظیمات برگزیده تغییراتی ایجاد کنید، باید یک ویرایشگر ایجاد کنید . همانطور که در مثال زیر نشان داده شده است، باید پس از اتمام ویرایش، آن تغییرات را اعمال یا انجام دهید:
sharedPreferences
.edit() // create an Editor
.putBoolean("key", value)
.apply() // write to disk asynchronously
لامبداهای کاتلین برای این مورد مناسب هستند. آنها به شما این امکان را می دهند که با ارسال یک بلوک کد برای اجرا پس از ایجاد ویرایشگر، اجازه اجرای کد و سپس اجازه دادن به SharedPreferences
API تغییرات را به صورت اتمی، رویکرد مختصرتری در پیش بگیرید.
در اینجا نمونهای از یکی از توابع اصلی Android KTX، SharedPreferences.edit
است که یک تابع ویرایش را به SharedPreferences
اضافه میکند. این تابع یک پرچم boolean
اختیاری را به عنوان اولین آرگومان خود می گیرد که نشان می دهد آیا باید تغییرات را انجام یا اعمال کرد. همچنین یک عمل برای انجام در ویرایشگر SharedPreferences
به شکل لامبدا دریافت می کند.
// SharedPreferences.edit extension function signature from Android KTX - Core
// inline fun SharedPreferences.edit(
// commit: Boolean = false,
// action: SharedPreferences.Editor.() -> Unit)
// Commit a new value asynchronously
sharedPreferences.edit { putBoolean("key", value) }
// Commit a new value synchronously
sharedPreferences.edit(commit = true) { putBoolean("key", value) }
تماس گیرنده می تواند انتخاب کند که آیا تغییرات را انجام دهد یا اعمال کند. action
لامبدا خود یک تابع برنامه افزودنی ناشناس در SharedPreferences.Editor
است که Unit
برمیگرداند، همانطور که با امضای آن مشخص شده است. به همین دلیل است که در داخل بلوک، میتوانید کار را مستقیماً در SharedPreferences.Editor
انجام دهید.
در نهایت، امضای SharedPreferences.edit()
حاوی کلمه کلیدی inline
است. این کلمه کلیدی به کامپایلر Kotlin می گوید که باید بایت کد کامپایل شده برای تابع را هر بار که از تابع استفاده می شود کپی و جایگذاری (یا درون خطی ) کند. این امر از سربار نمونه سازی یک کلاس جدید برای هر action
در هر بار فراخوانی این تابع جلوگیری می کند.
این الگوی ارسال کد با استفاده از لامبدا، اعمال پیشفرضهای معقول که میتوان آنها را نادیده گرفت، و افزودن این رفتارها به APIهای موجود با استفاده از توابع الحاقی inline
، نمونهای از پیشرفتهای ارائهشده توسط کتابخانه Android KTX است.
از Android KTX در پروژه خود استفاده کنید
برای شروع استفاده از Android KTX، وابستگی زیر را به فایل build.gradle
پروژه خود اضافه کنید:
شیار
repositories { google() }
کاتلین
repositories { google() }
ماژول های AndroidX
Android KTX در ماژول هایی سازماندهی شده است که هر ماژول شامل یک یا چند بسته است.
شما باید یک وابستگی برای هر مصنوع ماژول در فایل build.gradle
برنامه خود قرار دهید. به یاد داشته باشید که شماره نسخه را به آرتیفکت اضافه کنید. میتوانید آخرین شمارههای نسخه را در بخش مربوط به هر مصنوع در این مبحث پیدا کنید.
Android KTX شامل یک ماژول تک هسته ای است که پسوندهای Kotlin را برای APIهای فریمورک رایج و چندین پسوند خاص دامنه ارائه می کند.
به استثنای ماژول اصلی، همه مصنوعات ماژول KTX جایگزین وابستگی اساسی جاوا در فایل build.gradle
شما می شوند. برای مثال، میتوانید وابستگی androidx.fragment:fragment
با androidx.fragment:fragment-ktx
جایگزین کنید. این نحو به مدیریت بهتر نسخه کمک می کند و الزامات اعلام وابستگی اضافی را اضافه نمی کند.
هسته KTX
ماژول Core KTX افزونههایی را برای کتابخانههای معمولی که بخشی از چارچوب Android هستند ارائه میکند. این کتابخانه ها وابستگی های مبتنی بر جاوا ندارند که باید آنها را به build.gradle
اضافه کنید.
برای گنجاندن این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.core:core-ktx:1.13.1" }
کاتلین
dependencies { implementation("androidx.core:core-ktx:1.13.1") }
در اینجا لیستی از بسته های موجود در ماژول Core KTX آمده است:
- androidx.core.animation
- androidx.core.content
- androidx.core.content.res
- androidx.core.base
- androidx.core.database.sqlite
- androidx.core.graphics
- androidx.core.graphics.drawable
- androidx.core.location
- androidx.core.net
- androidx.core.os
- androidx.core.text
- androidx.core.transition
- androidx.core.util
- androidx.core.view
- androidx.core.widget
مجموعه KTX
افزونههای مجموعه شامل توابع کاربردی برای کار با مجموعه کتابخانههای کارآمد حافظه اندروید، از جمله ArrayMap
، LongSparseArray
، LruCache
و غیره هستند.
برای استفاده از این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.collection:collection-ktx:1.4.4" }
کاتلین
dependencies { implementation("androidx.collection:collection-ktx:1.4.4") }
پسوندهای مجموعه از بارگذاری بیش از حد اپراتور Kotlin برای ساده کردن مواردی مانند الحاق مجموعه استفاده می کنند، همانطور که در مثال زیر نشان داده شده است:
// Combine 2 ArraySets into 1.
val combinedArraySet = arraySetOf(1, 2, 3) + arraySetOf(4, 5, 6)
// Combine with numbers to create a new sets.
val newArraySet = combinedArraySet + 7 + 8
قطعه KTX
ماژول Fragment KTX تعدادی پسوند برای ساده سازی قطعه API ارائه می دهد.
برای گنجاندن این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.fragment:fragment-ktx:1.8.3" }
کاتلین
dependencies { implementation("androidx.fragment:fragment-ktx:1.8.3") }
با ماژول Fragment KTX، می توانید تراکنش های قطعه را با لامبدا ساده کنید، به عنوان مثال:
fragmentManager().commit {
addToBackStack("...")
setCustomAnimations(
R.anim.enter_anim,
R.anim.exit_anim)
add(fragment, "...")
}
همچنین میتوانید با استفاده از viewModels
و نمایندههای ویژگی activityViewModels
به ViewModel
در یک خط متصل شوید:
// Get a reference to the ViewModel scoped to this Fragment
val viewModel by viewModels<MyViewModel>()
// Get a reference to the ViewModel scoped to its Activity
val viewModel by activityViewModels<MyViewModel>()
چرخه حیات KTX
Lifecycle KTX یک LifecycleScope
برای هر شیء Lifecycle
تعریف می کند. هر برنامهای که در این محدوده راهاندازی میشود، زمانی که Lifecycle
از بین میرود، لغو میشود. می توانید با استفاده از ویژگی lifecycle.coroutineScope
یا lifecycleOwner.lifecycleScope
به CoroutineScope
از Lifecycle
دسترسی داشته باشید.
برای گنجاندن این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.8.6" }
کاتلین
dependencies { implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.8.6") }
مثال زیر نحوه استفاده از lifecycleOwner.lifecycleScope
برای ایجاد متن از پیش محاسبه شده به صورت ناهمزمان نشان می دهد:
class MyFragment: Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewLifecycleOwner.lifecycleScope.launch {
val params = TextViewCompat.getTextMetricsParams(textView)
val precomputedText = withContext(Dispatchers.Default) {
PrecomputedTextCompat.create(longTextContent, params)
}
TextViewCompat.setPrecomputedText(textView, precomputedText)
}
}
}
LiveData KTX
هنگام استفاده از LiveData، ممکن است لازم باشد مقادیر را به صورت ناهمزمان محاسبه کنید. به عنوان مثال، ممکن است بخواهید تنظیمات برگزیده یک کاربر را بازیابی کنید و آنها را به UI خود ارائه دهید. برای این موارد، LiveData KTX یک تابع سازنده liveData
را ارائه می دهد که یک تابع suspend
فراخوانی می کند و نتیجه را به عنوان یک شی LiveData
ارائه می کند.
برای گنجاندن این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.8.6" }
کاتلین
dependencies { implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.8.6") }
در مثال زیر، loadUser()
یک تابع suspend است که در جای دیگری اعلام شده است. می توانید از تابع liveData
builder برای فراخوانی loadUser()
به صورت ناهمزمان استفاده کنید و سپس از emit()
برای انتشار نتیجه استفاده کنید:
val user: LiveData<User> = liveData {
val data = database.loadUser() // loadUser is a suspend function.
emit(data)
}
برای اطلاعات بیشتر در مورد استفاده از کوروتین ها با LiveData
، به استفاده از کوروتین های Kotlin با اجزای معماری مراجعه کنید.
ناوبری KTX
هر جزء از کتابخانه ناوبری نسخه KTX خود را دارد که API را به گونه ای مختصر و اصطلاحی Kotlin تطبیق می دهد.
برای گنجاندن این ماژول ها، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.navigation:navigation-runtime-ktx:2.8.1" implementation "androidx.navigation:navigation-fragment-ktx:2.8.1" implementation "androidx.navigation:navigation-ui-ktx:2.8.1" }
کاتلین
dependencies { implementation("androidx.navigation:navigation-runtime-ktx:2.8.1") implementation("androidx.navigation:navigation-fragment-ktx:2.8.1") implementation("androidx.navigation:navigation-ui-ktx:2.8.1") }
همانطور که در مثال زیر نشان داده شده است، از توابع افزونه و تفویض ویژگی برای دسترسی به آرگومان های مقصد و پیمایش به مقصد استفاده کنید:
class MyDestination : Fragment() {
// Type-safe arguments are accessed from the bundle.
val args by navArgs<MyDestinationArgs>()
...
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
view.findViewById<Button>(R.id.next)
.setOnClickListener {
// Fragment extension added to retrieve a NavController from
// any destination.
findNavController().navigate(R.id.action_to_next_destination)
}
}
...
}
پالت KTX
ماژول Palette KTX پشتیبانی اصطلاحی Kotlin را برای کار با پالت های رنگی ارائه می دهد.
برای استفاده از این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.palette:palette-ktx:1.0.0" }
کاتلین
dependencies { implementation("androidx.palette:palette-ktx:1.0.0") }
به عنوان مثال، هنگام کار با یک نمونه Palette
، می توانید نمونه selected
برای یک target
معین را با استفاده از عملگر get ( [ ]
) بازیابی کنید:
val palette = Palette.from(bitmap).generate()
val swatch = palette[target]
جریان های واکنشی KTX
ماژول Reactive Streams KTX به شما امکان می دهد یک جریان LiveData
قابل مشاهده از یک ناشر ReactiveStreams
ایجاد کنید.
برای گنجاندن این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.lifecycle:lifecycle-reactivestreams-ktx:2.8.6" }
کاتلین
dependencies { implementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:2.8.6") }
به عنوان مثال، یک پایگاه داده با لیست کوچکی از کاربران را در نظر بگیرید. در برنامه خود، پایگاه داده را در حافظه بارگذاری می کنید و سپس داده های کاربر را در رابط کاربری خود نمایش می دهید. برای رسیدن به این هدف، می توانید از RxJava استفاده کنید. مولفه Room
Jetpack می تواند لیست کاربران را به صورت Flowable
بازیابی کند. در این سناریو، شما همچنین باید اشتراک ناشر Rx را در طول عمر قطعه یا فعالیت خود مدیریت کنید.
با این حال، با LiveDataReactiveStreams
، میتوانید از RxJava و مجموعه غنی از اپراتورها و قابلیتهای زمانبندی کار بهره ببرید و در عین حال با سادگی LiveData
نیز کار کنید، همانطور که در مثال زیر نشان داده شده است:
val fun getUsersLiveData() : LiveData<List<User>> {
val users: Flowable<List<User>> = dao.findUsers()
return LiveDataReactiveStreams.fromPublisher(users)
}
اتاق KTX
افزونههای اتاق، پشتیبانی کوروتینها را برای تراکنشهای پایگاه داده اضافه میکنند.
برای استفاده از این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.room:room-ktx:2.6.1" }
کاتلین
dependencies { implementation("androidx.room:room-ktx:2.6.1") }
در اینجا چند نمونه وجود دارد که در آن Room اکنون از کوروتین ها استفاده می کند. مثال اول از یک تابع suspend
برای برگرداندن لیستی از اشیاء User
استفاده می کند، در حالی که نمونه دوم Flow
Kotlin برای بازگرداندن ناهمزمان لیست User
استفاده می کند. توجه داشته باشید که هنگام استفاده از Flow
، همچنین از هرگونه تغییر در جداول مورد نظر مطلع می شوید.
@Query("SELECT * FROM Users")
suspend fun getUsers(): List<User>
@Query("SELECT * FROM Users")
fun getUsers(): Flow<List<User>>
SQLite KTX
برنامههای افزودنی SQLite کدهای مرتبط با SQL را در تراکنشها پیچیده میکنند و بسیاری از کدهای دیگ بخار را حذف میکنند.
برای استفاده از این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.sqlite:sqlite-ktx:2.4.0" }
کاتلین
dependencies { implementation("androidx.sqlite:sqlite-ktx:2.4.0") }
در اینجا مثالی از استفاده از پسوند transaction
برای انجام تراکنش پایگاه داده آورده شده است:
db.transaction {
// insert data
}
ViewModel KTX
کتابخانه ViewModel KTX یک تابع viewModelScope()
ارائه میکند که راهاندازی کوروتینها را از ViewModel
شما آسانتر میکند. CoroutineScope
به Dispatchers.Main
متصل است و با پاک شدن ViewModel
به طور خودکار لغو می شود. می توانید به جای ایجاد یک محدوده جدید برای هر ViewModel
از viewModelScope()
استفاده کنید.
برای گنجاندن این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.6" }
کاتلین
dependencies { implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.6") }
به عنوان مثال، تابع viewModelScope()
زیر یک coroutine راهاندازی میکند که درخواست شبکه را در یک رشته پسزمینه ایجاد میکند. کتابخانه تمام تنظیمات و پاکسازی محدوده مربوطه را انجام می دهد:
class MainViewModel : ViewModel() {
// Make a network request without blocking the UI thread
private fun makeNetworkRequest() {
// launch a coroutine in viewModelScope
viewModelScope.launch {
remoteApi.slowFetch()
...
}
}
// No need to override onCleared()
}
WorkManager KTX
WorkManager KTX پشتیبانی درجه یک را برای برنامههای روزمره ارائه میکند.
برای گنجاندن این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.work:work-runtime-ktx:2.9.1" }
کاتلین
dependencies { implementation("androidx.work:work-runtime-ktx:2.9.1") }
به جای گسترش Worker
، اکنون می توانید CoroutineWorker
گسترش دهید، که API کمی متفاوت دارد. به عنوان مثال، اگر می خواهید یک CoroutineWorker
ساده برای انجام برخی از عملیات شبکه بسازید، می توانید موارد زیر را انجام دهید:
class CoroutineDownloadWorker(context: Context, params: WorkerParameters)
: CoroutineWorker(context, params) {
override suspend fun doWork(): Result = coroutineScope {
val jobs = (0 until 100).map {
async {
downloadSynchronously("https://www.google.com")
}
}
// awaitAll will throw an exception if a download fails, which
// CoroutineWorker will treat as a failure
jobs.awaitAll()
Result.success()
}
}
برای اطلاعات بیشتر در مورد استفاده از CoroutineWorker
، به Threading در CoroutineWorker مراجعه کنید.
WorkManager KTX همچنین توابع افزونه را به Operations
و ListenableFutures
اضافه میکند تا برنامه فعلی را به حالت تعلیق درآورد.
در اینجا مثالی وجود دارد که Operation
که توسط enqueue()
برگردانده شده است به حالت تعلیق در می آورد:
// Inside of a coroutine...
// Run async operation and suspend until completed.
WorkManager.getInstance()
.beginWith(longWorkRequest)
.enqueue().await()
// Resume after work completes...
سایر ماژول های KTX
همچنین میتوانید ماژولهای KTX اضافی را که خارج از AndroidX وجود دارند، اضافه کنید.
Firebase KTX
برخی از Firebase SDK برای Android دارای کتابخانه های افزونه Kotlin هستند که به شما امکان می دهد هنگام استفاده از Firebase در برنامه خود کدهای اصطلاحی Kotlin بنویسید. برای اطلاعات بیشتر به موضوعات زیر مراجعه کنید:
پلتفرم نقشه های گوگل KTX
برنامههای افزودنی KTX برای کیتهای توسعه نرمافزار اندروید پلتفرم نقشههای گوگل موجود است که به شما امکان میدهد از چندین ویژگی زبان Kotlin مانند توابع برنامههای افزودنی، پارامترهای نامگذاری شده و آرگومانهای پیشفرض، اعلانهای تخریب ساختار، و روتینها استفاده کنید. برای اطلاعات بیشتر به موضوعات زیر مراجعه کنید:
بازی Core KTX
Play Core KTX با افزودن توابع افزونه به SplitInstallManager
و AppUpdateManager
در کتابخانه Play Core، از کوروتینهای Kotlin برای درخواستهای تکشات و Flow برای نظارت بر بهروزرسانیهای وضعیت پشتیبانی میکند.
برای گنجاندن این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "com.google.android.play:core-ktx:1.8.1" }
کاتلین
dependencies { implementation("com.google.android.play:core-ktx:1.8.1") }
در اینجا نمونه ای از Flow
نظارت بر وضعیت آمده است:
// Inside of a coroutine...
// Request in-app update status updates.
manager.requestUpdateFlow().collect { updateResult ->
when (updateResult) {
is AppUpdateResult.Available -> TODO()
is AppUpdateResult.InProgress -> TODO()
is AppUpdateResult.Downloaded -> TODO()
AppUpdateResult.NotAvailable -> TODO()
}
}
اطلاعات بیشتر
برای کسب اطلاعات بیشتر در مورد Android KTX، ویدیوی DevBytes را ببینید.
برای گزارش یک مشکل یا پیشنهاد یک ویژگی، از ردیاب مشکل Android KTX استفاده کنید.
،Android KTX بخشی از Android Jetpack .
Android KTX مجموعهای از برنامههای افزودنی Kotlin است که همراه با Android Jetpack و سایر کتابخانههای اندروید موجود است. پسوندهای KTX کوتلین مختصر و اصطلاحی را به Jetpack، پلتفرم اندروید و سایر APIها ارائه می دهند. برای انجام این کار، این برنامه های افزودنی از چندین ویژگی زبان Kotlin استفاده می کنند، از جمله موارد زیر:
- توابع پسوند
- ویژگی های پسوند
- لامبدا
- پارامترهای نامگذاری شده
- مقادیر پیش فرض پارامتر
- کوروتین ها
به عنوان مثال، هنگام کار با SharedPreferences
، قبل از اینکه بتوانید در داده های تنظیمات برگزیده تغییراتی ایجاد کنید، باید یک ویرایشگر ایجاد کنید . همانطور که در مثال زیر نشان داده شده است، باید پس از اتمام ویرایش، آن تغییرات را اعمال یا انجام دهید:
sharedPreferences
.edit() // create an Editor
.putBoolean("key", value)
.apply() // write to disk asynchronously
لامبداهای کاتلین برای این مورد مناسب هستند. آنها به شما این امکان را می دهند که با ارسال یک بلوک کد برای اجرا پس از ایجاد ویرایشگر، اجازه اجرای کد و سپس اجازه دادن به SharedPreferences
API تغییرات را به صورت اتمی، رویکرد مختصرتری در پیش بگیرید.
در اینجا نمونهای از یکی از توابع اصلی Android KTX، SharedPreferences.edit
است که یک تابع ویرایش را به SharedPreferences
اضافه میکند. این تابع یک پرچم boolean
اختیاری را به عنوان اولین آرگومان خود می گیرد که نشان می دهد آیا باید تغییرات را انجام یا اعمال کرد. همچنین یک عمل برای انجام در ویرایشگر SharedPreferences
به شکل لامبدا دریافت می کند.
// SharedPreferences.edit extension function signature from Android KTX - Core
// inline fun SharedPreferences.edit(
// commit: Boolean = false,
// action: SharedPreferences.Editor.() -> Unit)
// Commit a new value asynchronously
sharedPreferences.edit { putBoolean("key", value) }
// Commit a new value synchronously
sharedPreferences.edit(commit = true) { putBoolean("key", value) }
تماس گیرنده می تواند انتخاب کند که آیا تغییرات را انجام دهد یا اعمال کند. action
لامبدا خود یک تابع برنامه افزودنی ناشناس در SharedPreferences.Editor
است که Unit
برمیگرداند، همانطور که با امضای آن مشخص شده است. به همین دلیل است که در داخل بلوک، میتوانید کار را مستقیماً در SharedPreferences.Editor
انجام دهید.
در نهایت، امضای SharedPreferences.edit()
حاوی کلمه کلیدی inline
است. این کلمه کلیدی به کامپایلر Kotlin می گوید که باید بایت کد کامپایل شده برای تابع را هر بار که از تابع استفاده می شود کپی و جایگذاری (یا درون خطی ) کند. این امر از سربار نمونه سازی یک کلاس جدید برای هر action
در هر بار فراخوانی این تابع جلوگیری می کند.
این الگوی ارسال کد با استفاده از لامبدا، اعمال پیشفرضهای معقول که میتوان آنها را نادیده گرفت، و افزودن این رفتارها به APIهای موجود با استفاده از توابع الحاقی inline
، نمونهای از پیشرفتهای ارائهشده توسط کتابخانه Android KTX است.
از Android KTX در پروژه خود استفاده کنید
برای شروع استفاده از Android KTX، وابستگی زیر را به فایل build.gradle
پروژه خود اضافه کنید:
شیار
repositories { google() }
کاتلین
repositories { google() }
ماژول های AndroidX
Android KTX در ماژول هایی سازماندهی شده است که هر ماژول شامل یک یا چند بسته است.
شما باید یک وابستگی برای هر مصنوع ماژول در فایل build.gradle
برنامه خود قرار دهید. به یاد داشته باشید که شماره نسخه را به آرتیفکت اضافه کنید. میتوانید آخرین شمارههای نسخه را در بخش مربوط به هر مصنوع در این مبحث پیدا کنید.
Android KTX شامل یک ماژول تک هسته ای است که پسوندهای Kotlin را برای APIهای فریمورک رایج و چندین پسوند خاص دامنه ارائه می کند.
به استثنای ماژول اصلی، همه مصنوعات ماژول KTX جایگزین وابستگی اساسی جاوا در فایل build.gradle
شما می شوند. برای مثال، میتوانید وابستگی androidx.fragment:fragment
با androidx.fragment:fragment-ktx
جایگزین کنید. این نحو به مدیریت بهتر نسخه کمک می کند و الزامات اعلام وابستگی اضافی را اضافه نمی کند.
هسته KTX
ماژول Core KTX افزونههایی را برای کتابخانههای معمولی که بخشی از چارچوب Android هستند ارائه میکند. این کتابخانه ها وابستگی های مبتنی بر جاوا ندارند که باید آنها را به build.gradle
اضافه کنید.
برای گنجاندن این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.core:core-ktx:1.13.1" }
کاتلین
dependencies { implementation("androidx.core:core-ktx:1.13.1") }
در اینجا لیستی از بسته های موجود در ماژول Core KTX آمده است:
- androidx.core.animation
- androidx.core.content
- androidx.core.content.res
- androidx.core.base
- androidx.core.database.sqlite
- androidx.core.graphics
- androidx.core.graphics.drawable
- androidx.core.location
- androidx.core.net
- androidx.core.os
- androidx.core.text
- androidx.core.transition
- androidx.core.util
- androidx.core.view
- androidx.core.widget
مجموعه KTX
افزونههای مجموعه شامل توابع کاربردی برای کار با مجموعه کتابخانههای کارآمد حافظه اندروید، از جمله ArrayMap
، LongSparseArray
، LruCache
و غیره هستند.
برای استفاده از این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.collection:collection-ktx:1.4.4" }
کاتلین
dependencies { implementation("androidx.collection:collection-ktx:1.4.4") }
پسوندهای مجموعه از بارگذاری بیش از حد اپراتور Kotlin برای ساده کردن مواردی مانند الحاق مجموعه استفاده می کنند، همانطور که در مثال زیر نشان داده شده است:
// Combine 2 ArraySets into 1.
val combinedArraySet = arraySetOf(1, 2, 3) + arraySetOf(4, 5, 6)
// Combine with numbers to create a new sets.
val newArraySet = combinedArraySet + 7 + 8
قطعه KTX
ماژول Fragment KTX تعدادی پسوند برای ساده سازی قطعه API ارائه می دهد.
برای گنجاندن این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.fragment:fragment-ktx:1.8.3" }
کاتلین
dependencies { implementation("androidx.fragment:fragment-ktx:1.8.3") }
با ماژول Fragment KTX، می توانید تراکنش های قطعه را با لامبدا ساده کنید، به عنوان مثال:
fragmentManager().commit {
addToBackStack("...")
setCustomAnimations(
R.anim.enter_anim,
R.anim.exit_anim)
add(fragment, "...")
}
همچنین میتوانید با استفاده از viewModels
و نمایندههای ویژگی activityViewModels
به ViewModel
در یک خط متصل شوید:
// Get a reference to the ViewModel scoped to this Fragment
val viewModel by viewModels<MyViewModel>()
// Get a reference to the ViewModel scoped to its Activity
val viewModel by activityViewModels<MyViewModel>()
چرخه حیات KTX
Lifecycle KTX یک LifecycleScope
برای هر شیء Lifecycle
تعریف می کند. هر برنامهای که در این محدوده راهاندازی میشود، زمانی که Lifecycle
از بین میرود، لغو میشود. می توانید با استفاده از ویژگی lifecycle.coroutineScope
یا lifecycleOwner.lifecycleScope
به CoroutineScope
از Lifecycle
دسترسی داشته باشید.
برای گنجاندن این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.8.6" }
کاتلین
dependencies { implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.8.6") }
مثال زیر نحوه استفاده از lifecycleOwner.lifecycleScope
برای ایجاد متن از پیش محاسبه شده به صورت ناهمزمان نشان می دهد:
class MyFragment: Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewLifecycleOwner.lifecycleScope.launch {
val params = TextViewCompat.getTextMetricsParams(textView)
val precomputedText = withContext(Dispatchers.Default) {
PrecomputedTextCompat.create(longTextContent, params)
}
TextViewCompat.setPrecomputedText(textView, precomputedText)
}
}
}
LiveData KTX
هنگام استفاده از LiveData، ممکن است لازم باشد مقادیر را به صورت ناهمزمان محاسبه کنید. به عنوان مثال، ممکن است بخواهید تنظیمات برگزیده یک کاربر را بازیابی کنید و آنها را به UI خود ارائه دهید. برای این موارد، LiveData KTX یک تابع سازنده liveData
را ارائه می دهد که یک تابع suspend
فراخوانی می کند و نتیجه را به عنوان یک شی LiveData
ارائه می کند.
برای گنجاندن این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.8.6" }
کاتلین
dependencies { implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.8.6") }
در مثال زیر، loadUser()
یک تابع suspend است که در جای دیگری اعلام شده است. می توانید از تابع liveData
builder برای فراخوانی loadUser()
به صورت ناهمزمان استفاده کنید و سپس از emit()
برای انتشار نتیجه استفاده کنید:
val user: LiveData<User> = liveData {
val data = database.loadUser() // loadUser is a suspend function.
emit(data)
}
برای اطلاعات بیشتر در مورد استفاده از کوروتین ها با LiveData
، به استفاده از کوروتین های Kotlin با اجزای معماری مراجعه کنید.
ناوبری KTX
هر جزء از کتابخانه ناوبری نسخه KTX خود را دارد که API را به گونه ای مختصر و اصطلاحی Kotlin تطبیق می دهد.
برای گنجاندن این ماژول ها، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.navigation:navigation-runtime-ktx:2.8.1" implementation "androidx.navigation:navigation-fragment-ktx:2.8.1" implementation "androidx.navigation:navigation-ui-ktx:2.8.1" }
کاتلین
dependencies { implementation("androidx.navigation:navigation-runtime-ktx:2.8.1") implementation("androidx.navigation:navigation-fragment-ktx:2.8.1") implementation("androidx.navigation:navigation-ui-ktx:2.8.1") }
همانطور که در مثال زیر نشان داده شده است، از توابع افزونه و تفویض ویژگی برای دسترسی به آرگومان های مقصد و پیمایش به مقصد استفاده کنید:
class MyDestination : Fragment() {
// Type-safe arguments are accessed from the bundle.
val args by navArgs<MyDestinationArgs>()
...
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
view.findViewById<Button>(R.id.next)
.setOnClickListener {
// Fragment extension added to retrieve a NavController from
// any destination.
findNavController().navigate(R.id.action_to_next_destination)
}
}
...
}
پالت KTX
ماژول Palette KTX پشتیبانی اصطلاحی Kotlin را برای کار با پالت های رنگی ارائه می دهد.
برای استفاده از این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.palette:palette-ktx:1.0.0" }
کاتلین
dependencies { implementation("androidx.palette:palette-ktx:1.0.0") }
به عنوان مثال، هنگام کار با یک نمونه Palette
، می توانید نمونه selected
برای یک target
معین را با استفاده از عملگر get ( [ ]
) بازیابی کنید:
val palette = Palette.from(bitmap).generate()
val swatch = palette[target]
جریان های واکنشی KTX
ماژول Reactive Streams KTX به شما امکان می دهد یک جریان LiveData
قابل مشاهده از یک ناشر ReactiveStreams
ایجاد کنید.
برای گنجاندن این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.lifecycle:lifecycle-reactivestreams-ktx:2.8.6" }
کاتلین
dependencies { implementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:2.8.6") }
به عنوان مثال، یک پایگاه داده با لیست کوچکی از کاربران را در نظر بگیرید. در برنامه خود، پایگاه داده را در حافظه بارگذاری می کنید و سپس داده های کاربر را در رابط کاربری خود نمایش می دهید. برای رسیدن به این هدف، می توانید از RxJava استفاده کنید. مولفه Room
Jetpack می تواند لیست کاربران را به صورت Flowable
بازیابی کند. در این سناریو، شما همچنین باید اشتراک ناشر Rx را در طول عمر قطعه یا فعالیت خود مدیریت کنید.
با این حال، با LiveDataReactiveStreams
، میتوانید از RxJava و مجموعه غنی از اپراتورها و قابلیتهای زمانبندی کار بهره ببرید و در عین حال با سادگی LiveData
نیز کار کنید، همانطور که در مثال زیر نشان داده شده است:
val fun getUsersLiveData() : LiveData<List<User>> {
val users: Flowable<List<User>> = dao.findUsers()
return LiveDataReactiveStreams.fromPublisher(users)
}
اتاق KTX
افزونههای اتاق، پشتیبانی کوروتینها را برای تراکنشهای پایگاه داده اضافه میکنند.
برای استفاده از این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.room:room-ktx:2.6.1" }
کاتلین
dependencies { implementation("androidx.room:room-ktx:2.6.1") }
در اینجا چند نمونه وجود دارد که در آن Room اکنون از کوروتین ها استفاده می کند. مثال اول از یک تابع suspend
برای برگرداندن لیستی از اشیاء User
استفاده می کند، در حالی که نمونه دوم از Flow
Kotlin برای بازگرداندن ناهمزمان لیست User
استفاده می کند. توجه داشته باشید که هنگام استفاده از Flow
، همچنین از هرگونه تغییر در جداول مورد نظر مطلع می شوید.
@Query("SELECT * FROM Users")
suspend fun getUsers(): List<User>
@Query("SELECT * FROM Users")
fun getUsers(): Flow<List<User>>
SQLite KTX
برنامههای افزودنی SQLite کدهای مرتبط با SQL را در تراکنشها پیچیده میکنند و بسیاری از کدهای دیگ بخار را حذف میکنند.
برای استفاده از این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.sqlite:sqlite-ktx:2.4.0" }
کاتلین
dependencies { implementation("androidx.sqlite:sqlite-ktx:2.4.0") }
در اینجا مثالی از استفاده از پسوند transaction
برای انجام تراکنش پایگاه داده آورده شده است:
db.transaction {
// insert data
}
ViewModel KTX
کتابخانه ViewModel KTX یک تابع viewModelScope()
ارائه میکند که راهاندازی کوروتینها را از ViewModel
شما آسانتر میکند. CoroutineScope
به Dispatchers.Main
متصل است و با پاک شدن ViewModel
به طور خودکار لغو می شود. می توانید به جای ایجاد یک محدوده جدید برای هر ViewModel
از viewModelScope()
استفاده کنید.
برای گنجاندن این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.6" }
کاتلین
dependencies { implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.6") }
به عنوان مثال، تابع viewModelScope()
زیر یک coroutine راهاندازی میکند که درخواست شبکه را در یک رشته پسزمینه ایجاد میکند. کتابخانه تمام تنظیمات و پاکسازی محدوده مربوطه را انجام می دهد:
class MainViewModel : ViewModel() {
// Make a network request without blocking the UI thread
private fun makeNetworkRequest() {
// launch a coroutine in viewModelScope
viewModelScope.launch {
remoteApi.slowFetch()
...
}
}
// No need to override onCleared()
}
WorkManager KTX
WorkManager KTX پشتیبانی درجه یک را برای برنامههای روزمره ارائه میکند.
برای گنجاندن این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.work:work-runtime-ktx:2.9.1" }
کاتلین
dependencies { implementation("androidx.work:work-runtime-ktx:2.9.1") }
به جای گسترش Worker
، اکنون می توانید CoroutineWorker
گسترش دهید، که API کمی متفاوت دارد. به عنوان مثال، اگر می خواهید یک CoroutineWorker
ساده برای انجام برخی از عملیات شبکه بسازید، می توانید موارد زیر را انجام دهید:
class CoroutineDownloadWorker(context: Context, params: WorkerParameters)
: CoroutineWorker(context, params) {
override suspend fun doWork(): Result = coroutineScope {
val jobs = (0 until 100).map {
async {
downloadSynchronously("https://www.google.com")
}
}
// awaitAll will throw an exception if a download fails, which
// CoroutineWorker will treat as a failure
jobs.awaitAll()
Result.success()
}
}
برای اطلاعات بیشتر در مورد استفاده از CoroutineWorker
، به Threading در CoroutineWorker مراجعه کنید.
WorkManager KTX همچنین توابع افزونه را به Operations
و ListenableFutures
اضافه میکند تا برنامه فعلی را به حالت تعلیق درآورد.
در اینجا مثالی وجود دارد که Operation
که توسط enqueue()
برگردانده شده است به حالت تعلیق در می آورد:
// Inside of a coroutine...
// Run async operation and suspend until completed.
WorkManager.getInstance()
.beginWith(longWorkRequest)
.enqueue().await()
// Resume after work completes...
سایر ماژول های KTX
همچنین میتوانید ماژولهای KTX اضافی را که خارج از AndroidX وجود دارند، اضافه کنید.
Firebase KTX
برخی از Firebase SDK برای Android دارای کتابخانه های افزونه Kotlin هستند که به شما امکان می دهد هنگام استفاده از Firebase در برنامه خود کدهای اصطلاحی Kotlin بنویسید. برای اطلاعات بیشتر به موضوعات زیر مراجعه کنید:
پلتفرم نقشه های گوگل KTX
برنامههای افزودنی KTX برای کیتهای توسعه نرمافزار اندروید پلتفرم نقشههای گوگل موجود است که به شما امکان میدهد از چندین ویژگی زبان Kotlin مانند توابع برنامههای افزودنی، پارامترهای نامگذاری شده و آرگومانهای پیشفرض، اعلانهای تخریب ساختار، و روتینها استفاده کنید. برای اطلاعات بیشتر به موضوعات زیر مراجعه کنید:
بازی Core KTX
Play Core KTX با افزودن توابع افزونه به SplitInstallManager
و AppUpdateManager
در کتابخانه Play Core، از کوروتینهای Kotlin برای درخواستهای تکشات و Flow برای نظارت بر بهروزرسانیهای وضعیت پشتیبانی میکند.
برای گنجاندن این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "com.google.android.play:core-ktx:1.8.1" }
کاتلین
dependencies { implementation("com.google.android.play:core-ktx:1.8.1") }
در اینجا نمونه ای از Flow
نظارت بر وضعیت آمده است:
// Inside of a coroutine...
// Request in-app update status updates.
manager.requestUpdateFlow().collect { updateResult ->
when (updateResult) {
is AppUpdateResult.Available -> TODO()
is AppUpdateResult.InProgress -> TODO()
is AppUpdateResult.Downloaded -> TODO()
AppUpdateResult.NotAvailable -> TODO()
}
}
اطلاعات بیشتر
برای کسب اطلاعات بیشتر در مورد Android KTX، ویدیوی DevBytes را ببینید.
برای گزارش یک مشکل یا پیشنهاد یک ویژگی، از ردیاب مشکل Android KTX استفاده کنید.
،Android KTX بخشی از Android Jetpack .
Android KTX مجموعهای از برنامههای افزودنی Kotlin است که همراه با Android Jetpack و سایر کتابخانههای اندروید موجود است. پسوندهای KTX کوتلین مختصر و اصطلاحی را به Jetpack، پلتفرم اندروید و سایر APIها ارائه می دهند. برای انجام این کار، این برنامه های افزودنی از چندین ویژگی زبان Kotlin استفاده می کنند، از جمله موارد زیر:
- توابع پسوند
- ویژگی های پسوند
- لامبدا
- پارامترهای نامگذاری شده
- مقادیر پیش فرض پارامتر
- کوروتین ها
به عنوان مثال، هنگام کار با SharedPreferences
، قبل از اینکه بتوانید در داده های تنظیمات برگزیده تغییراتی ایجاد کنید، باید یک ویرایشگر ایجاد کنید . همانطور که در مثال زیر نشان داده شده است، باید پس از اتمام ویرایش، آن تغییرات را اعمال یا انجام دهید:
sharedPreferences
.edit() // create an Editor
.putBoolean("key", value)
.apply() // write to disk asynchronously
لامبداهای کاتلین برای این مورد مناسب هستند. آنها به شما این امکان را می دهند که با ارسال یک بلوک کد برای اجرا پس از ایجاد ویرایشگر، اجازه اجرای کد و سپس اجازه دادن به SharedPreferences
API تغییرات را به صورت اتمی، رویکرد مختصرتری در پیش بگیرید.
در اینجا نمونهای از یکی از توابع اصلی Android KTX، SharedPreferences.edit
است که یک تابع ویرایش را به SharedPreferences
اضافه میکند. این تابع یک پرچم boolean
اختیاری را به عنوان اولین آرگومان خود می گیرد که نشان می دهد آیا باید تغییرات را انجام یا اعمال کرد. همچنین یک عمل برای انجام در ویرایشگر SharedPreferences
به شکل لامبدا دریافت می کند.
// SharedPreferences.edit extension function signature from Android KTX - Core
// inline fun SharedPreferences.edit(
// commit: Boolean = false,
// action: SharedPreferences.Editor.() -> Unit)
// Commit a new value asynchronously
sharedPreferences.edit { putBoolean("key", value) }
// Commit a new value synchronously
sharedPreferences.edit(commit = true) { putBoolean("key", value) }
تماس گیرنده می تواند انتخاب کند که آیا تغییرات را انجام دهد یا اعمال کند. action
لامبدا خود یک تابع برنامه افزودنی ناشناس در SharedPreferences.Editor
است که Unit
برمیگرداند، همانطور که با امضای آن مشخص شده است. به همین دلیل است که در داخل بلوک، میتوانید کار را مستقیماً در SharedPreferences.Editor
انجام دهید.
در نهایت، امضای SharedPreferences.edit()
حاوی کلمه کلیدی inline
است. این کلمه کلیدی به کامپایلر Kotlin می گوید که باید بایت کد کامپایل شده برای تابع را هر بار که از تابع استفاده می شود کپی و جایگذاری (یا درون خطی ) کند. این امر از سربار نمونه سازی یک کلاس جدید برای هر action
در هر بار فراخوانی این تابع جلوگیری می کند.
این الگوی ارسال کد با استفاده از لامبدا، اعمال پیشفرضهای معقول که میتوان آنها را نادیده گرفت، و افزودن این رفتارها به APIهای موجود با استفاده از توابع الحاقی inline
، نمونهای از پیشرفتهای ارائهشده توسط کتابخانه Android KTX است.
از Android KTX در پروژه خود استفاده کنید
برای شروع استفاده از Android KTX، وابستگی زیر را به فایل build.gradle
پروژه خود اضافه کنید:
شیار
repositories { google() }
کاتلین
repositories { google() }
ماژول های AndroidX
Android KTX در ماژول هایی سازماندهی شده است که هر ماژول شامل یک یا چند بسته است.
شما باید یک وابستگی برای هر مصنوع ماژول در فایل build.gradle
برنامه خود قرار دهید. به یاد داشته باشید که شماره نسخه را به آرتیفکت اضافه کنید. میتوانید آخرین شمارههای نسخه را در بخش مربوط به هر مصنوع در این مبحث پیدا کنید.
Android KTX شامل یک ماژول تک هسته ای است که پسوندهای Kotlin را برای APIهای فریمورک رایج و چندین پسوند خاص دامنه ارائه می کند.
به استثنای ماژول اصلی، همه مصنوعات ماژول KTX جایگزین وابستگی اساسی جاوا در فایل build.gradle
شما می شوند. برای مثال، میتوانید وابستگی androidx.fragment:fragment
با androidx.fragment:fragment-ktx
جایگزین کنید. این نحو به مدیریت بهتر نسخه کمک می کند و الزامات اعلام وابستگی اضافی را اضافه نمی کند.
هسته KTX
ماژول Core KTX افزونههایی را برای کتابخانههای معمولی که بخشی از چارچوب Android هستند ارائه میکند. این کتابخانه ها وابستگی های مبتنی بر جاوا ندارند که باید آنها را به build.gradle
اضافه کنید.
برای گنجاندن این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.core:core-ktx:1.13.1" }
کاتلین
dependencies { implementation("androidx.core:core-ktx:1.13.1") }
در اینجا لیستی از بسته های موجود در ماژول Core KTX آمده است:
- androidx.core.animation
- androidx.core.content
- androidx.core.content.res
- androidx.core.base
- androidx.core.database.sqlite
- androidx.core.graphics
- androidx.core.graphics.drawable
- androidx.core.location
- androidx.core.net
- androidx.core.os
- androidx.core.text
- androidx.core.transition
- androidx.core.util
- androidx.core.view
- androidx.core.widget
مجموعه KTX
افزونههای مجموعه شامل توابع کاربردی برای کار با مجموعه کتابخانههای کارآمد حافظه اندروید، از جمله ArrayMap
، LongSparseArray
، LruCache
و غیره هستند.
برای استفاده از این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.collection:collection-ktx:1.4.4" }
کاتلین
dependencies { implementation("androidx.collection:collection-ktx:1.4.4") }
پسوندهای مجموعه از بارگذاری بیش از حد اپراتور Kotlin برای ساده کردن مواردی مانند الحاق مجموعه استفاده می کنند، همانطور که در مثال زیر نشان داده شده است:
// Combine 2 ArraySets into 1.
val combinedArraySet = arraySetOf(1, 2, 3) + arraySetOf(4, 5, 6)
// Combine with numbers to create a new sets.
val newArraySet = combinedArraySet + 7 + 8
قطعه KTX
ماژول Fragment KTX تعدادی پسوند برای ساده سازی قطعه API ارائه می دهد.
برای گنجاندن این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.fragment:fragment-ktx:1.8.3" }
کاتلین
dependencies { implementation("androidx.fragment:fragment-ktx:1.8.3") }
با ماژول Fragment KTX، می توانید تراکنش های قطعه را با لامبدا ساده کنید، به عنوان مثال:
fragmentManager().commit {
addToBackStack("...")
setCustomAnimations(
R.anim.enter_anim,
R.anim.exit_anim)
add(fragment, "...")
}
همچنین میتوانید با استفاده از viewModels
و نمایندههای ویژگی activityViewModels
به ViewModel
در یک خط متصل شوید:
// Get a reference to the ViewModel scoped to this Fragment
val viewModel by viewModels<MyViewModel>()
// Get a reference to the ViewModel scoped to its Activity
val viewModel by activityViewModels<MyViewModel>()
چرخه حیات KTX
Lifecycle KTX یک LifecycleScope
برای هر شیء Lifecycle
تعریف می کند. هر برنامهای که در این محدوده راهاندازی میشود، زمانی که Lifecycle
از بین میرود، لغو میشود. می توانید با استفاده از ویژگی lifecycle.coroutineScope
یا lifecycleOwner.lifecycleScope
به CoroutineScope
از Lifecycle
دسترسی داشته باشید.
برای گنجاندن این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.8.6" }
کاتلین
dependencies { implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.8.6") }
مثال زیر نحوه استفاده از lifecycleOwner.lifecycleScope
برای ایجاد متن از پیش محاسبه شده به صورت ناهمزمان نشان می دهد:
class MyFragment: Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewLifecycleOwner.lifecycleScope.launch {
val params = TextViewCompat.getTextMetricsParams(textView)
val precomputedText = withContext(Dispatchers.Default) {
PrecomputedTextCompat.create(longTextContent, params)
}
TextViewCompat.setPrecomputedText(textView, precomputedText)
}
}
}
LiveData KTX
هنگام استفاده از LiveData، ممکن است لازم باشد مقادیر را به صورت ناهمزمان محاسبه کنید. به عنوان مثال، ممکن است بخواهید تنظیمات برگزیده یک کاربر را بازیابی کنید و آنها را به UI خود ارائه دهید. برای این موارد، LiveData KTX یک تابع سازنده liveData
را ارائه می دهد که یک تابع suspend
فراخوانی می کند و نتیجه را به عنوان یک شی LiveData
ارائه می کند.
برای گنجاندن این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.8.6" }
کاتلین
dependencies { implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.8.6") }
در مثال زیر، loadUser()
یک تابع suspend است که در جای دیگری اعلام شده است. می توانید از تابع liveData
builder برای فراخوانی loadUser()
به صورت ناهمزمان استفاده کنید و سپس از emit()
برای انتشار نتیجه استفاده کنید:
val user: LiveData<User> = liveData {
val data = database.loadUser() // loadUser is a suspend function.
emit(data)
}
برای اطلاعات بیشتر در مورد استفاده از کوروتین ها با LiveData
، به استفاده از کوروتین های Kotlin با اجزای معماری مراجعه کنید.
ناوبری KTX
هر جزء از کتابخانه ناوبری نسخه KTX خود را دارد که API را به گونه ای مختصر و اصطلاحی Kotlin تطبیق می دهد.
برای گنجاندن این ماژول ها، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.navigation:navigation-runtime-ktx:2.8.1" implementation "androidx.navigation:navigation-fragment-ktx:2.8.1" implementation "androidx.navigation:navigation-ui-ktx:2.8.1" }
کاتلین
dependencies { implementation("androidx.navigation:navigation-runtime-ktx:2.8.1") implementation("androidx.navigation:navigation-fragment-ktx:2.8.1") implementation("androidx.navigation:navigation-ui-ktx:2.8.1") }
همانطور که در مثال زیر نشان داده شده است، از توابع افزونه و تفویض ویژگی برای دسترسی به آرگومان های مقصد و پیمایش به مقصد استفاده کنید:
class MyDestination : Fragment() {
// Type-safe arguments are accessed from the bundle.
val args by navArgs<MyDestinationArgs>()
...
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
view.findViewById<Button>(R.id.next)
.setOnClickListener {
// Fragment extension added to retrieve a NavController from
// any destination.
findNavController().navigate(R.id.action_to_next_destination)
}
}
...
}
پالت KTX
ماژول Palette KTX پشتیبانی اصطلاحی Kotlin را برای کار با پالت های رنگی ارائه می دهد.
برای استفاده از این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.palette:palette-ktx:1.0.0" }
کاتلین
dependencies { implementation("androidx.palette:palette-ktx:1.0.0") }
به عنوان مثال، هنگام کار با یک نمونه Palette
، می توانید نمونه selected
برای یک target
معین را با استفاده از عملگر get ( [ ]
) بازیابی کنید:
val palette = Palette.from(bitmap).generate()
val swatch = palette[target]
جریان های واکنشی KTX
ماژول Reactive Streams KTX به شما امکان می دهد یک جریان LiveData
قابل مشاهده از یک ناشر ReactiveStreams
ایجاد کنید.
برای گنجاندن این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.lifecycle:lifecycle-reactivestreams-ktx:2.8.6" }
کاتلین
dependencies { implementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:2.8.6") }
به عنوان مثال، یک پایگاه داده با لیست کوچکی از کاربران را در نظر بگیرید. در برنامه خود، پایگاه داده را در حافظه بارگذاری می کنید و سپس داده های کاربر را در رابط کاربری خود نمایش می دهید. برای رسیدن به این هدف، می توانید از RxJava استفاده کنید. مولفه Room
Jetpack می تواند لیست کاربران را به صورت Flowable
بازیابی کند. در این سناریو، شما همچنین باید اشتراک ناشر Rx را در طول عمر قطعه یا فعالیت خود مدیریت کنید.
با این حال، با LiveDataReactiveStreams
، میتوانید از RxJava و مجموعه غنی از اپراتورها و قابلیتهای زمانبندی کار بهره ببرید و در عین حال با سادگی LiveData
نیز کار کنید، همانطور که در مثال زیر نشان داده شده است:
val fun getUsersLiveData() : LiveData<List<User>> {
val users: Flowable<List<User>> = dao.findUsers()
return LiveDataReactiveStreams.fromPublisher(users)
}
اتاق KTX
افزونههای اتاق، پشتیبانی کوروتینها را برای تراکنشهای پایگاه داده اضافه میکنند.
برای استفاده از این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.room:room-ktx:2.6.1" }
کاتلین
dependencies { implementation("androidx.room:room-ktx:2.6.1") }
در اینجا چند نمونه وجود دارد که در آن Room اکنون از کوروتین ها استفاده می کند. مثال اول از یک تابع suspend
برای برگرداندن لیستی از اشیاء User
استفاده می کند، در حالی که نمونه دوم از Flow
Kotlin برای بازگرداندن ناهمزمان لیست User
استفاده می کند. توجه داشته باشید که هنگام استفاده از Flow
، همچنین از هرگونه تغییر در جداول مورد نظر مطلع می شوید.
@Query("SELECT * FROM Users")
suspend fun getUsers(): List<User>
@Query("SELECT * FROM Users")
fun getUsers(): Flow<List<User>>
SQLite KTX
برنامههای افزودنی SQLite کدهای مرتبط با SQL را در تراکنشها پیچیده میکنند و بسیاری از کدهای دیگ بخار را حذف میکنند.
برای استفاده از این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.sqlite:sqlite-ktx:2.4.0" }
کاتلین
dependencies { implementation("androidx.sqlite:sqlite-ktx:2.4.0") }
در اینجا مثالی از استفاده از پسوند transaction
برای انجام تراکنش پایگاه داده آورده شده است:
db.transaction {
// insert data
}
ViewModel KTX
کتابخانه ViewModel KTX یک تابع viewModelScope()
ارائه میکند که راهاندازی کوروتینها را از ViewModel
شما آسانتر میکند. CoroutineScope
به Dispatchers.Main
متصل است و با پاک شدن ViewModel
به طور خودکار لغو می شود. می توانید به جای ایجاد یک محدوده جدید برای هر ViewModel
از viewModelScope()
استفاده کنید.
برای گنجاندن این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.6" }
کاتلین
dependencies { implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.6") }
به عنوان مثال، تابع viewModelScope()
زیر یک coroutine راهاندازی میکند که درخواست شبکه را در یک رشته پسزمینه ایجاد میکند. کتابخانه تمام تنظیمات و پاکسازی محدوده مربوطه را انجام می دهد:
class MainViewModel : ViewModel() {
// Make a network request without blocking the UI thread
private fun makeNetworkRequest() {
// launch a coroutine in viewModelScope
viewModelScope.launch {
remoteApi.slowFetch()
...
}
}
// No need to override onCleared()
}
WorkManager KTX
WorkManager KTX پشتیبانی درجه یک را برای برنامههای روزمره ارائه میکند.
برای گنجاندن این ماژول، موارد زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.work:work-runtime-ktx:2.9.1" }
کاتلین
dependencies { implementation("androidx.work:work-runtime-ktx:2.9.1") }
به جای گسترش Worker
، اکنون می توانید CoroutineWorker
گسترش دهید، که API کمی متفاوت دارد. به عنوان مثال، اگر می خواهید یک CoroutineWorker
ساده برای انجام برخی از عملیات شبکه بسازید، می توانید موارد زیر را انجام دهید:
class CoroutineDownloadWorker(context: Context, params: WorkerParameters)
: CoroutineWorker(context, params) {
override suspend fun doWork(): Result = coroutineScope {
val jobs = (0 until 100).map {
async {
downloadSynchronously("https://www.google.com")
}
}
// awaitAll will throw an exception if a download fails, which
// CoroutineWorker will treat as a failure
jobs.awaitAll()
Result.success()
}
}
برای اطلاعات بیشتر در مورد استفاده از CoroutineWorker
، به Threading در CoroutineWorker مراجعه کنید.
WorkManager KTX همچنین توابع افزونه را به Operations
و ListenableFutures
اضافه میکند تا برنامه فعلی را به حالت تعلیق درآورد.
در اینجا مثالی وجود دارد که Operation
که توسط enqueue()
برگردانده شده است به حالت تعلیق در می آورد:
// Inside of a coroutine...
// Run async operation and suspend until completed.
WorkManager.getInstance()
.beginWith(longWorkRequest)
.enqueue().await()
// Resume after work completes...
سایر ماژول های KTX
همچنین میتوانید ماژولهای KTX اضافی را که خارج از AndroidX وجود دارند، اضافه کنید.
Firebase KTX
برخی از Firebase SDK برای Android دارای کتابخانه های افزونه Kotlin هستند که به شما امکان می دهد هنگام استفاده از Firebase در برنامه خود کدهای اصطلاحی Kotlin بنویسید. برای اطلاعات بیشتر به موضوعات زیر مراجعه کنید:
پلتفرم نقشه های گوگل KTX
برنامههای افزودنی KTX برای کیتهای توسعه نرمافزار اندروید پلتفرم نقشههای گوگل موجود است که به شما امکان میدهد از چندین ویژگی زبان Kotlin مانند توابع برنامههای افزودنی، پارامترهای نامگذاری شده و آرگومانهای پیشفرض، اعلانهای تخریب ساختار، و روتینها استفاده کنید. برای اطلاعات بیشتر به موضوعات زیر مراجعه کنید:
بازی Core KTX
Play Core KTX پشتیبانی از Coroutines Kotlin را برای درخواست های یک شات و جریان برای نظارت بر به روزرسانی وضعیت با اضافه کردن توابع پسوند به SplitInstallManager
و AppUpdateManager
در کتابخانه Play Core اضافه می کند.
برای درج این ماژول ، موارد زیر را به پرونده build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "com.google.android.play:core-ktx:1.8.1" }
کاتلین
dependencies { implementation("com.google.android.play:core-ktx:1.8.1") }
در اینجا نمونه ای از Flow
نظارت بر وضعیت:
// Inside of a coroutine...
// Request in-app update status updates.
manager.requestUpdateFlow().collect { updateResult ->
when (updateResult) {
is AppUpdateResult.Available -> TODO()
is AppUpdateResult.InProgress -> TODO()
is AppUpdateResult.Downloaded -> TODO()
AppUpdateResult.NotAvailable -> TODO()
}
}
اطلاعات بیشتر
برای کسب اطلاعات بیشتر در مورد Android KTX ، به فیلم Devbytes مراجعه کنید.
برای گزارش یک مسئله یا پیشنهاد یک ویژگی ، از ردیاب شماره Android KTX استفاده کنید.
،Android KTX بخشی از Android Jetpack .
Android KTX مجموعه ای از پسوندهای Kotlin است که با Android Jetpack و سایر کتابخانه های Android گنجانده شده است. پسوندهای KTX Kotlin مختصر ، ایدیوماتیک را به Jetpack ، سیستم عامل Android و سایر API ها ارائه می دهند. برای انجام این کار ، این پسوندها چندین ویژگی زبان کوتلین را از جمله موارد زیر به کار می برند:
- توابع فرمت
- خواص فرمت
- لامبدا
- پارامترهای نامگذاری شده
- مقادیر پیش فرض پارامتر
- کوروتین ها
به عنوان نمونه ، هنگام کار با SharedPreferences
، باید یک ویرایشگر ایجاد کنید تا بتوانید در داده های ترجیحات تغییراتی ایجاد کنید. همانطور که در مثال زیر نشان داده شده است ، باید هنگام اتمام ویرایش ، آن تغییرات را اعمال کنید یا مرتکب شوید:
sharedPreferences
.edit() // create an Editor
.putBoolean("key", value)
.apply() // write to disk asynchronously
Kotlin Lambdas مناسب برای این مورد استفاده است. آنها به شما این امکان را می دهند که با عبور از یک بلوک کد برای اجرای ویرایشگر ، یک رویکرد مختصر تر را انجام دهید ، اجازه دهید کد را اجرا کند و سپس اجازه دهید API SharedPreferences
تغییرات را به صورت اتمی اعمال کند.
در اینجا نمونه ای از یکی از توابع اصلی Android KTX ، SharedPreferences.edit
، که یک تابع ویرایش را به SharedPreferences
اضافه می کند ، آورده شده است. این عملکرد یک پرچم boolean
اختیاری را به عنوان اولین استدلال خود در نظر می گیرد که نشان می دهد آیا مرتکب تغییر یا اعمال تغییرات می شود. همچنین اقدامی برای اجرای ویرایشگر SharedPreferences
در قالب یک لامبدا دریافت می کند.
// SharedPreferences.edit extension function signature from Android KTX - Core
// inline fun SharedPreferences.edit(
// commit: Boolean = false,
// action: SharedPreferences.Editor.() -> Unit)
// Commit a new value asynchronously
sharedPreferences.edit { putBoolean("key", value) }
// Commit a new value synchronously
sharedPreferences.edit(commit = true) { putBoolean("key", value) }
تماس گیرنده می تواند تغییرات را انجام دهد یا اعمال کند. action
Lambda خود یک تابع پسوند ناشناس در SharedPreferences.Editor
است که Unit
برمی گرداند ، همانطور که با امضای آن نشان داده شده است. به همین دلیل است که در داخل بلوک ، شما قادر به انجام کار مستقیماً در SharedPreferences.Editor
هستید.
سرانجام ، امضای SharedPreferences.edit()
inline
این کلمه کلیدی به کامپایلر Kotlin می گوید که باید هر بار که از عملکرد استفاده می شود ، کد اصلی کامپایل شده را برای عملکرد کپی و چسباند . این امر از سربار فوری کلاس جدید برای هر action
که هر بار این عملکرد فراخوانی می شود ، جلوگیری می کند.
این الگوی عبور از کد با استفاده از لامبدا ، استفاده از پیش فرض های معقول که می تواند نادیده گرفته شود ، و افزودن این رفتارها به API های موجود با استفاده از توابع پسوند inline
نمونه ای از پیشرفت های ارائه شده توسط کتابخانه Android KTX است.
از Android KTX در پروژه خود استفاده کنید
برای شروع استفاده از Android KTX ، وابستگی زیر را به پرونده build.gradle
پروژه خود اضافه کنید:
شیار
repositories { google() }
کاتلین
repositories { google() }
ماژول های Androidx
Android KTX در ماژول ها سازماندهی می شود ، جایی که هر ماژول شامل یک یا چند بسته است.
شما باید یک وابستگی برای هر مصنوعات ماژول را در پرونده build.gradle
برنامه خود قرار دهید. به یاد داشته باشید که شماره نسخه را به مصنوعات اضافه کنید. در این موضوع می توانید آخرین شماره های نسخه را در بخش مربوط به هر اثر هنری پیدا کنید.
Android KTX حاوی یک ماژول هسته ای واحد است که پسوندهای Kotlin را برای API های چارچوب مشترک و چندین پسوند خاص دامنه فراهم می کند.
به استثنای ماژول اصلی ، تمام مصنوعات ماژول KTX جایگزین وابستگی جاوا در پرونده build.gradle
شما می شوند. به عنوان مثال ، می توانید androidx.fragment:fragment
با androidx.fragment:fragment-ktx
. این نحو به مدیریت بهتر نسخه کمک می کند و الزامات بیانیه وابستگی اضافی را اضافه نمی کند.
KTX هسته
ماژول KTX هسته ای برای کتابخانه های مشترک که بخشی از چارچوب Android هستند ، فراهم می کند. این کتابخانه ها وابستگی های مبتنی بر جاوا ندارند که شما باید به build.gradle
اضافه کنید.
برای درج این ماژول ، موارد زیر را به پرونده build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.core:core-ktx:1.13.1" }
کاتلین
dependencies { implementation("androidx.core:core-ktx:1.13.1") }
در اینجا لیستی از بسته های موجود در ماژول هسته KTX آورده شده است:
- androidx.core.animation
- androidx.core.content
- androidx.core.content.res
- androidx.core.database
- androidx.core.database.sqlite
- androidx.core.graphics
- androidx.core.graphics.drawable
- Androidx.core.Location
- androidx.core.net
- androidx.core.os
- androidx.core.text
- Androidx.core.Transition
- androidx.core.util
- androidx.core.view
- androidx.core.widget
مجموعه ktx
برنامه های افزودنی این مجموعه شامل توابع ابزار برای همکاری با کتابخانه های جمع آوری حافظه Android ، از جمله ArrayMap
، LongSparseArray
، LruCache
و دیگران است.
برای استفاده از این ماژول ، موارد زیر را به پرونده build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.collection:collection-ktx:1.4.4" }
کاتلین
dependencies { implementation("androidx.collection:collection-ktx:1.4.4") }
پسوندهای مجموعه از اضافه بار اپراتور Kotlin برای ساده کردن مواردی مانند جمع آوری مجموعه ، همانطور که در مثال زیر نشان داده شده است ، استفاده می کنند:
// Combine 2 ArraySets into 1.
val combinedArraySet = arraySetOf(1, 2, 3) + arraySetOf(4, 5, 6)
// Combine with numbers to create a new sets.
val newArraySet = combinedArraySet + 7 + 8
قطعه ktx
ماژول KTX قطعه تعدادی پسوند برای ساده سازی API قطعه ارائه می دهد.
برای درج این ماژول ، موارد زیر را به پرونده build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.fragment:fragment-ktx:1.8.3" }
کاتلین
dependencies { implementation("androidx.fragment:fragment-ktx:1.8.3") }
با استفاده از ماژول قطعه KTX ، می توانید معاملات قطعه ای را با Lambdas ساده کنید ، به عنوان مثال:
fragmentManager().commit {
addToBackStack("...")
setCustomAnimations(
R.anim.enter_anim,
R.anim.exit_anim)
add(fragment, "...")
}
همچنین می توانید با استفاده از نمایندگان viewModels
و activityViewModels
به یک ViewModel
در یک خط متصل شوید:
// Get a reference to the ViewModel scoped to this Fragment
val viewModel by viewModels<MyViewModel>()
// Get a reference to the ViewModel scoped to its Activity
val viewModel by activityViewModels<MyViewModel>()
چرخه عمر KTX
چرخه عمر KTX یک LifecycleScope
برای هر شیء Lifecycle
تعریف می کند. هر Coroutine که در این محدوده راه اندازی شده است ، هنگام از بین رفتن Lifecycle
، لغو می شود. می توانید با استفاده از حیات حیات lifecycle.coroutineScope
یا ویژگی های lifecycleOwner.lifecycleScope
به CoroutineScope
Lifecycle
دسترسی پیدا کنید.
برای درج این ماژول ، موارد زیر را به پرونده build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.8.6" }
کاتلین
dependencies { implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.8.6") }
مثال زیر نحوه استفاده از lifecycleOwner.lifecycleScope
برای ایجاد متن از پیش تعیین شده به صورت غیر همزمان نشان می دهد:
class MyFragment: Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewLifecycleOwner.lifecycleScope.launch {
val params = TextViewCompat.getTextMetricsParams(textView)
val precomputedText = withContext(Dispatchers.Default) {
PrecomputedTextCompat.create(longTextContent, params)
}
TextViewCompat.setPrecomputedText(textView, precomputedText)
}
}
}
زندگی KTX
هنگام استفاده از Livedata ، ممکن است لازم باشد مقادیر غیر همزمان را محاسبه کنید. به عنوان مثال ، شما ممکن است بخواهید ترجیحات کاربر را بازیابی کرده و به آنها در UI خود خدمت کنید. برای این موارد ، Livedata KTX یک عملکرد سازنده liveData
را ارائه می دهد که یک عملکرد suspend
فراخوانی می کند و نتیجه را به عنوان یک شیء LiveData
می کند.
برای درج این ماژول ، موارد زیر را به پرونده build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.8.6" }
کاتلین
dependencies { implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.8.6") }
در مثال زیر ، loadUser()
یک تابع تعلیق است که در جای دیگر اعلام شده است. شما می توانید از تابع liveData
Builder برای تماس با loadUser()
غیر همزمان استفاده کنید ، و سپس از emit()
برای انتشار نتیجه استفاده کنید:
val user: LiveData<User> = liveData {
val data = database.loadUser() // loadUser is a suspend function.
emit(data)
}
برای کسب اطلاعات بیشتر در مورد استفاده از Coroutines با LiveData
، به استفاده از Coroutines Kotlin با اجزای معماری مراجعه کنید.
ناوبری KTX
هر مؤلفه کتابخانه ناوبری نسخه KTX خاص خود را دارد که API را به صورت موجز تر و kotlin-idiomatic سازگار می کند.
برای درج این ماژول ها ، موارد زیر را به پرونده build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.navigation:navigation-runtime-ktx:2.8.1" implementation "androidx.navigation:navigation-fragment-ktx:2.8.1" implementation "androidx.navigation:navigation-ui-ktx:2.8.1" }
کاتلین
dependencies { implementation("androidx.navigation:navigation-runtime-ktx:2.8.1") implementation("androidx.navigation:navigation-fragment-ktx:2.8.1") implementation("androidx.navigation:navigation-ui-ktx:2.8.1") }
برای دسترسی به آرگومان های مقصد و حرکت به مقصد ، همانطور که در مثال زیر نشان داده شده است ، از توابع پسوند و نمایندگی ملک استفاده کنید:
class MyDestination : Fragment() {
// Type-safe arguments are accessed from the bundle.
val args by navArgs<MyDestinationArgs>()
...
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
view.findViewById<Button>(R.id.next)
.setOnClickListener {
// Fragment extension added to retrieve a NavController from
// any destination.
findNavController().navigate(R.id.action_to_next_destination)
}
}
...
}
پالت ktx
ماژول پالت KTX پشتیبانی کوتلین Idiomatic را برای کار با پالت های رنگی ارائه می دهد.
برای استفاده از این ماژول ، موارد زیر را به پرونده build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.palette:palette-ktx:1.0.0" }
کاتلین
dependencies { implementation("androidx.palette:palette-ktx:1.0.0") }
به عنوان نمونه ، هنگام کار با یک نمونه Palette
، می توانید با استفاده از اپراتور GET ( [ ]
) Swatch selected
را برای یک target
معین بازیابی کنید:
val palette = Palette.from(bitmap).generate()
val swatch = palette[target]
جریان های واکنشی KTX
ماژول ktx جریان واکنشی به شما امکان می دهد یک جریان LiveData
مشاهده شده از یک ناشر ReactiveStreams
ایجاد کنید.
برای درج این ماژول ، موارد زیر را به پرونده build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.lifecycle:lifecycle-reactivestreams-ktx:2.8.6" }
کاتلین
dependencies { implementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:2.8.6") }
به عنوان نمونه ، یک پایگاه داده با یک لیست کوچک از کاربران فرض کنید. در برنامه خود ، پایگاه داده را در حافظه بارگذاری می کنید و سپس داده های کاربر را در UI خود نمایش می دهید. برای دستیابی به این هدف ، ممکن است از Rxjava استفاده کنید. مؤلفه Room
JetPack می تواند لیست کاربر را به عنوان یک Flowable
بازیابی کند. در این سناریو ، شما همچنین باید اشتراک ناشر RX را در طول زندگی قطعه یا فعالیت خود مدیریت کنید.
با این حال ، با LiveDataReactiveStreams
، می توانید از Rxjava و مجموعه غنی از اپراتورها و قابلیت های برنامه ریزی کار در ضمن کار با سادگی LiveData
بهره مند شوید ، همانطور که در مثال زیر نشان داده شده است:
val fun getUsersLiveData() : LiveData<List<User>> {
val users: Flowable<List<User>> = dao.findUsers()
return LiveDataReactiveStreams.fromPublisher(users)
}
اتاق KTX
پسوندهای اتاق پشتیبانی Coroutines را برای معاملات پایگاه داده اضافه می کنند.
برای استفاده از این ماژول ، موارد زیر را به پرونده build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.room:room-ktx:2.6.1" }
کاتلین
dependencies { implementation("androidx.room:room-ktx:2.6.1") }
در اینجا چند مثال آورده شده است که اکنون اتاق از Coroutines استفاده می کند. مثال اول از یک تابع suspend
برای بازگرداندن لیستی از اشیاء User
استفاده می کند ، در حالی که دوم Flow
Kotlin برای بازگرداندن لیست User
استفاده می کند. توجه داشته باشید که هنگام استفاده از Flow
، از هرگونه تغییر در جداول مورد نظر خود مطلع می شوید.
@Query("SELECT * FROM Users")
suspend fun getUsers(): List<User>
@Query("SELECT * FROM Users")
fun getUsers(): Flow<List<User>>
sqlite ktx
پسوندهای SQLITE کد مربوط به SQL را در معاملات بسته بندی کرده و بسیاری از کد های دیگ بخار را از بین می برد.
برای استفاده از این ماژول ، موارد زیر را به پرونده build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.sqlite:sqlite-ktx:2.4.0" }
کاتلین
dependencies { implementation("androidx.sqlite:sqlite-ktx:2.4.0") }
در اینجا مثالی از استفاده از پسوند transaction
برای انجام معامله پایگاه داده آورده شده است:
db.transaction {
// insert data
}
ViewModel Ktx
کتابخانه ViewModel KTX یک عملکرد viewModelScope()
را ارائه می دهد که راه اندازی Coroutines را از ViewModel
شما آسانتر می کند. CoroutineScope
به Dispatchers.Main
موظف است و هنگام پاک شدن ViewModel
به طور خودکار لغو می شود. به جای ایجاد دامنه جدید برای هر ViewModel
، می توانید از viewModelScope()
استفاده کنید.
برای درج این ماژول ، موارد زیر را به پرونده build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.6" }
کاتلین
dependencies { implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.6") }
به عنوان نمونه ، عملکرد viewModelScope()
زیر یک Coroutine را راه اندازی می کند که درخواست شبکه را در یک موضوع پس زمینه ایجاد می کند. این کتابخانه تمام تنظیمات و پاکسازی دامنه مربوطه را کنترل می کند:
class MainViewModel : ViewModel() {
// Make a network request without blocking the UI thread
private fun makeNetworkRequest() {
// launch a coroutine in viewModelScope
viewModelScope.launch {
remoteApi.slowFetch()
...
}
}
// No need to override onCleared()
}
کارگر KTX
WorkManager KTX پشتیبانی کلاس اول را برای Coroutines ارائه می دهد.
برای درج این ماژول ، موارد زیر را به پرونده build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "androidx.work:work-runtime-ktx:2.9.1" }
کاتلین
dependencies { implementation("androidx.work:work-runtime-ktx:2.9.1") }
به جای گسترش Worker
، اکنون می توانید CoroutineWorker
گسترش دهید که API کمی متفاوت دارد. به عنوان مثال ، اگر می خواستید یک CoroutineWorker
ساده برای انجام برخی از عملیات شبکه بسازید ، می توانید موارد زیر را انجام دهید:
class CoroutineDownloadWorker(context: Context, params: WorkerParameters)
: CoroutineWorker(context, params) {
override suspend fun doWork(): Result = coroutineScope {
val jobs = (0 until 100).map {
async {
downloadSynchronously("https://www.google.com")
}
}
// awaitAll will throw an exception if a download fails, which
// CoroutineWorker will treat as a failure
jobs.awaitAll()
Result.success()
}
}
برای کسب اطلاعات بیشتر در مورد استفاده از CoroutineWorker
، به Threading in CoroutineWorker مراجعه کنید.
WorkManager KTX همچنین توابع فرمت را به Operations
و ListenableFutures
اضافه می کند تا Coroutine فعلی را به حالت تعلیق درآورد.
در اینجا مثالی آورده شده است که Operation
که توسط enqueue()
به حالت تعلیق در می آورد:
// Inside of a coroutine...
// Run async operation and suspend until completed.
WorkManager.getInstance()
.beginWith(longWorkRequest)
.enqueue().await()
// Resume after work completes...
سایر ماژول های KTX
همچنین می توانید ماژول های اضافی KTX را که در خارج از Androidx وجود دارد ، درج کنید.
Firebase KTX
برخی از SDK های Firebase برای Android دارای کتابخانه های پسوند Kotlin هستند که به شما امکان می دهند هنگام استفاده از Firebase در برنامه خود کد Kotlin Idiomatic را بنویسید. برای اطلاعات بیشتر ، به موضوعات زیر مراجعه کنید:
Google Maps Platform KTX
پسوندهای KTX برای سیستم های Google Maps Android SDK در دسترس است که به شما امکان می دهد از چندین ویژگی زبان Kotlin مانند توابع فرمت ، پارامترهای نامگذاری شده و استدلال های پیش فرض ، اعلامیه های تخریب و Coroutines استفاده کنید. برای اطلاعات بیشتر ، به موضوعات زیر مراجعه کنید:
Core KTX را بازی کنید
Play Core KTX پشتیبانی از Coroutines Kotlin را برای درخواست های یک شات و جریان برای نظارت بر به روزرسانی وضعیت با اضافه کردن توابع پسوند به SplitInstallManager
و AppUpdateManager
در کتابخانه Play Core اضافه می کند.
برای درج این ماژول ، موارد زیر را به پرونده build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { implementation "com.google.android.play:core-ktx:1.8.1" }
کاتلین
dependencies { implementation("com.google.android.play:core-ktx:1.8.1") }
در اینجا نمونه ای از Flow
نظارت بر وضعیت:
// Inside of a coroutine...
// Request in-app update status updates.
manager.requestUpdateFlow().collect { updateResult ->
when (updateResult) {
is AppUpdateResult.Available -> TODO()
is AppUpdateResult.InProgress -> TODO()
is AppUpdateResult.Downloaded -> TODO()
AppUpdateResult.NotAvailable -> TODO()
}
}
اطلاعات بیشتر
برای کسب اطلاعات بیشتر در مورد Android KTX ، به فیلم Devbytes مراجعه کنید.
برای گزارش یک مسئله یا پیشنهاد یک ویژگی ، از ردیاب شماره Android KTX استفاده کنید.