شرح التعامل مع spinner في الاندرويد مع لغة kotlin
اولاً يتم اضافة الـ spinner الى layout الخاص في الواجهة
1 2 3 4 5 |
<Spinner android:id="@+id/spinner" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="25dp" /> |
سوف يتم التعامل مع كامل خصائص من داخل كلاس kotlin اضافت النصوص وال event
نحتاج الى اضافة النصوص الذي نريد اضافتها داخل array اما من داخل الكلاس مباشراً او ممكن اضافتها في ملف string واستدعائها داخل الكلاس
طريقة الاولى انشاء array
1 |
val spinnerItems = arrayOf("items 1","items 2","items 3", "items 4") |
الطريقة الثانية انشاء array داخل ملف string واستدعائه داخل الكلاس
1 2 3 4 5 6 7 8 9 |
<string-array name="spinner_array"> <item>item 1</item> <item>item 2</item> <item>item 3</item> <item>item 4</item> <item>item 5</item> <item>item 6</item> <item>item 7</item> </string-array> |
هذه ال array داخل ملف ال string الخاص في المشروع الان نقوم باستدعاء array داخل الكلاس
1 |
val spinnerItems = resources.getStringArray(R.array.spinner_array) |
نستخدم resources للوصول الى ملفات المشروع و getStringArray لاختيار المراد اسدعائه لو اردنا فقط نص نستخدم getString
الان نقوم بتهيئة الـ spinner واضافة النصوص المراد اظهارها وشكل ال spinner
1 2 |
spinner.adapter = ArrayAdapter<String>(this /* context */ , android.R.layout.simple_list_item_1 /* spinner layout */, spinnerItems /* array value */) |
استخدمنا layout جاهز في الاندرويد android.R.layout.simple_list_item_1
ممكن هنى انشاء layout خاص بك وتصميم الspinner في شكل الذي تريد ممكن اضافة نص وصورة بشكل الذي تريده سوف يكون هناك تدوينة خاص به قريباً لشرح spinner custom layout
الان الت event الخاص به اذا ادرنا عمل شيئ عند اختيار قيم من المستخدم فوراً بدون ان يضغط على شيئ فور اختياره للقيمة نظهر له رسالة او ننقله لصفحة اخرى
1 2 3 4 5 6 |
spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{ override fun onNothingSelected(parent: AdapterView<*>?) {} override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) { text_view.text = spinnerItems[position] } } |
قمت باضافة textView للواجهة لدي لاظهار اختيار المستخدم فور اخيتاره له عن طريق استخدام دالة onItemSelected
ايضاً قمت باضافة button للواجهة لجلب ما ختاره المستخدم من غير استدعاء array
فورا عن طريق استخدام دالة selectedItem واظهار رسالة في النص
1 2 3 |
btn.setOnClickListener({ showToast(spinner.selectedItem.toString()) }) |
كود layout كاملاً
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.kotdroid.testkotlin.MainActivity"> <Spinner android:id="@+id/spinner" android:layout_width="match_parent" android:layout_height="wrap_content" android:prompt="@array/spinner_array" android:padding="25dp" /> <TextView android:id="@+id/text_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="15dp"/> <Button android:id="@+id/btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="Click" /> </LinearLayout> |
كود الكلاس
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) //val spinnerItems = arrayOf("items 1","items 2","items 3", "items 4") val spinnerItems = resources.getStringArray(R.array.spinner_array) spinner.adapter = ArrayAdapter<String>(this /* context */ , android.R.layout.simple_list_item_1 /* spinner layout */, spinnerItems /* array value */) spinner.setSelection(0) spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{ override fun onNothingSelected(parent: AdapterView<*>?) {} override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) { text_view.text = spinnerItems[position] } } btn.setOnClickListener({ showToast(spinner.selectedItem.toString()) }) } fun showToast(message: String) { Toast.makeText(applicationContext, message, Toast.LENGTH_LONG).show() } } |