فهرست
الف ) درباره این کتاب
ب ) آیا این کتاب مناسب شماست؟
پ ) درباره نویسنده
ت ) چند سخن مترجم
3.1 ) ساختن پروژه در اندروید استودیو
3.3 ) تبدیل MainActivity به کد کاتلین
8 - بدست آوردن دیتا با استفاده از API
8.2 ) انجام درخواست خارج از نخ اصلی
9.3 ) مپ کردن یک آبجکت به متغیرها
10.1 ) تبدیل JSON به کلاس های دیتا
10.2 ) شکل دادن به لایه ی domain
11.3 ) عملگرها در توابع الحاقی
بقیه فصل ها در حال ترجمه است
نوشتن اولین کلاس
خب ما تا الان فایل MainActivity.kt
مون رو درست کردیم.ولی اگه یادتون باشه قرار بود یک اپ پیشبینی آب و هوا درست کنیم و باید توی صفحمون از پیشبینی آب و هوای هفته بعد گفته بشه پس نیاز به یک سری تغییرات داریم.
ساختن layout
بهترین view
که میتونه لیست پیش بینی آب و هوا بسازه یک RecyclerView
هه و بنابراین به یک وابستگی نیازمنده.بنابراین نیاز داریم که build.gradle
رو تغییر بدیم:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile "com.android.support:appcompat-v7:$support_version"
compile "com.android.support:recyclerview-v7:$support_version"
// ...
}
و حالا بریم سر activity_main.xml
و اونو تغییر بدیم:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/forecast_list"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
داخل MainActivity.kt
اون خط کدی که نوشتیم برای تست رو پاک میکنیم.همینطور که گفتیم اگه بخوایم کامپوننتی رو از توی xml
صدا بزنیم کافیه از id
یش استفاده کنیم.ولی فعلا به همون روش قدیمی استفاده از findViewById
ادامه میدیم:
val forecastList = findViewById(R.id.forecast_list) as RecyclerView
forecastList.layoutManager = LinearLayoutManager(this)
همینطور که میبینین ما یک متغیر تعریف کردیم و به RecyclerView کستش کردیم.و همچنین به جای setter خودمون مستقیم به layoutManager دسترسی پیداکردیم.یک لیست برای این layout کافیه پس به استفاده از یک LinearLayoutManager بسنده کردیم.
نمونه سازی: اگه دقت کنین اینجا دیگه از کلیدواژه new
استفاده نشد! در واقع برای ساختن یک شی دیگه نیازی به استفاده از new
نیست تنها کافیه از نام کلاس و سازنده اش استفاده بشه.
آداپتور Recycler
همینطور که متوجه شدین اینجا نیازمند یک اداپتور برای RecyclerView
مون هستیم.فعلا تنها از یک TextView
برای RecyclerView
استفاده میکنیم. یک لیست ساده از text
ها چیزیه که فعلا بهش نیاز داریم.لازمه که یک فایل کاتلین به نام ForecastListAdapter.kt
باز کنیم و کدهای زیر رو داخلش بزنیم:
class ForecastListAdapter(val items: List<String>) :
RecyclerView.Adapter<ForecastListAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int):
ViewHolder {
return ViewHolder(TextView(parent.context))
}
override fun onBindViewHolder(holder: ViewHolder,
position: Int) {
holder.textView.text = items[position]
}
override fun getItemCount(): Int = items.size
class ViewHolder(val textView: TextView) : RecyclerView.ViewHolder(textView)
}
برگردیم به MainActivity
، حالا لازمه که یک لیست از رشته ها درست کنیم و بعدا به آداپتورمون بدیم:
private val items = listOf(
"Mon 6/23 - Sunny - 31/17",
"Tue 6/24 - Foggy - 21/8",
"Wed 6/25 - Cloudy - 22/17",
"Thurs 6/26 - Rainy - 18/11",
"Fri 6/27 - Foggy - 21/10",
"Sat 6/28 - TRAPPED IN WEATHERSTATION - 23/18",
"Sun 6/29 - Sunny - 20/7"
)
override fun onCreate(savedInstanceState: Bundle?) {
// ...
val forecastList = findViewById(R.id.forecast_list) as RecyclerView
forecastList.layoutManager = LinearLayoutManager(this)
forecastList.adapter = ForecastListAdapter(items)
}
اگر مفهومی رو از کالکشن و لیستمون متوجه نشدین نگران نباشین، بعدا راجع بهش صحبت میکنیم.فعلا فقط بدونین که یک لیست غیرقابل تغییر رو با استفاده از تابع listOf()
میتونیم درست کنیم.اون ازمون یک آرایه از ورودی ها میگیره و برامون لیست رو درست میکنه.تابع های دیگه ای هم هستن که تقریبا همین کار رو انجام میدن ولی خب بعدا راجبشون صحبت میکنیم.