آموزش برنامه نویسی اندروید قسمت نوزدهم
سلام خدمت همه دوستان عزیز. جلسه 19 آموزش اندروید رو شروع میکنیم.
در جلسات قبل به مباحث تردینگ پرداختیم، با آسینک تسک هم آشنا شدیم. در آینده در مثالهای بیشتر با اینها بیشتر هم کار خواهیم کرد. در این جلسه میخوام نحوه کار با لیست ویوها و نیز اسپینر رو یاد بدم. لیستها که خیلی در اندروید کاربرد دارن. از جمله لیست مخاطبها، تلگرام، یا هر لیستی که تقریبا در 90 درصد برنامههای اندرویدی مشاهده میکنید. اسپینرها هم برای انتخاب یک آیتم از یک منوی کشویی هست. در جلوتر متوجه میشید.
- اسپینرها در اندروید:
فرض کنید میخواهیم چنین چیزی داشته باشیم:
اسپینرها برای اینکه مقدار داده های نمایشی خودشون رو داشته باشند از آرایه ها استفاده میکنند. یعنی شما ابتدا یک آرایه ایجاد میکنید و بعد آن را به spinner وصل میکنید. و برای این اتصال از آداپترها استفاده میکنیم. قبلا موقعی که میخواستیم از autocomplete textview استفاده کنیم با آداپترها آشنا شدید. آداپترها برای اتصال یک داده به view ها (ابزارها) در برنامه شما هستند. خب پس شروع کنیم.
ابتدا در تگ xml لیوت خود یک اسپینر قرار میدهیم.
<Spinner android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/spinner"
></Spinner>
و حالا به اکتیویتی خود میریم.
من یک آرایه درست کردم. بصورت زیر:
String[] spinner_array = new String[]{"java", "js" , "android" , "sql"};
و بعد هم اسپینر خودم رو فراخوانی کردم:
final Spinner spinner = (Spinner) findViewById(R.id.spinner);
حالا باید آداپتر خود را بسازیم. خیلی ساده است. ArrayAdapter یک کلاس هست. کافی هست ازش یک نمونه بسازیم. این کلای 3 ورودی دارد (یعین کانستراکتور کلاس سه ورودی میگیرد.) ورودی اول از جنس Context هست. پس از this استفاده میکنیم. ورودی بعدی یک تم برای اسپینر هست که میتوانیم از لیوت های پیشفرض خود اندروید استفاده کنیم. برای این کار عبارت android.R.layout را مینویسیم و بطور مثال برای اسپینر از لیوت زیر استفاده میکنیم:
android.R.layout.simple_spinner_item
و ورودی آخر نیز نام آرایه ای هست که از آن برای اسپینر استفاده میکنیم. پس کد من هست:
ArrayAdapter<String> adapter = new ArrayAdapter<String>
(getApplicationContext(),android.R.layout.simple_spinner_item,spinner_array);
و در نهایت باید این آداپتر را به اسپینر خود وصل کنم. پس یک نگاه کلی به کد بندازیم:
خیلی هم خوب
حالا برنامه رو تست میکنیم. و همان چیزی شده که اول کار نشان دادم.
خب مسلما یکی از کارهایی که مورد استفاده هست گرفتن مقداری هست که کاربر از اسپینر انتخاب کرده. با یک متد به نام getSelectedItem . خب بیاید یک دکمه بذاریم که وقتی کاربر آن را زد مقداری که انتخاب کرده رو بصورت Toast نشان بده. من یک دکمه به اسم showSelected روی لیوت قرار دادم. کد زیر رو کافی هست بزنیم:
متد String.valueOf چکار میکنه؟ اول اینکه متد getSelectedItem یک object برمیگرونه. پس برای نمایش اون بعنوان یک استرینگ باید به استرینگ تبدیل شود. خب متد valueOf که در کلاس String هست یک آبجکت بعنوان ورودی میگیرد و آن را به استرینگ تبدیل میکند.
تست:
و حالا یک متد کاربردی در اسپینرها. شاید بخواهیم بلافاصله که کاربر یک آیتم را انتخاب کرد آن را داشته باشیم. مثلا در یک تکست ویو نمایش دهیم یا.....
برای اینکار از متد زیر استفاده میکنیم:
setOnItemSelectedListener
برای اینکه کدمان پیچیده نشود کار قبلی رو اینبار داخل این listener انجام میدیم:
میتونید تست کنید
داخل متد onItemSelected کار مورد نظر خودم رو نوشتم. متد دوم هم که مشخص هست از نامش. فقط یک نکته بگم. ورودی سوم این متد یعنی i پوزیشن آیتم انتخابی شمارو برمیگردونه. مثلا اگر کد زیر رو بزنید:
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(getApplicationContext(),String.valueOf(i),Toast.LENGTH_SHORT).show();
}
موقع انتخاب آیتم سوم یعنی android دارم: (اندیس ها از 0 شروع میشود)
- لیست ویوها
خب ابتدا باید تگ آن را ایجاد کنیم. مثلا:
کدش دقیقا مثل چیزی هست که کار کردیم! تنها باید یک layout مناسب برای آن انتخاب کنیم. مثلا:
و اما کد زیر رو ببینید:
متد اول هنگام کلیک کردن روی یک آیتم هست. و برای گرفتم آن آیتم از ورودی i از متد استفاده کردم. مثل اسپینر این ورودی شماره آیتم انتخاب شده را نشان میدهد. پس با متد getItemAtPosition و دادن مقدار i تونستم این مقدار را بگیرم.
اما متد دوم... این متد هنگامی صدا زده میشود که شما برای مدت طولانی تری از یک کلیک انگشت خود را روی یکی از آیتم های لیست نگه دارید. در اینجا پیام متفاوت تری نشان دادم تا تفاوت را ببینید:
خب ادامه بحث لیست ویوها برای جلسه آینده. خسته نباشید
نظرات کاربران