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 آمده است:

مجموعه 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 خود را دارد که 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 آمده است:

مجموعه 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 خود را دارد که 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 آمده است:

مجموعه 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 خود را دارد که 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 آورده شده است:

مجموعه 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 خاص خود را دارد که 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 استفاده کنید.