آموزش برنامه نویس اندروید قسمت نوزدهم

1395/1/12 ستاره مقاری 4591

سلام خدمت همه دوستان عزیز. جلسه 19 آموزش اندروید رو شروع میکنیم.

در جلسات قبل به مباحث تردینگ پرداختیم، با آسینک تسک هم آشنا شدیم. در آینده در مثالهای بیشتر با اینها بیشتر هم کار خواهیم کرد. در این جلسه میخوام نحوه کار با لیست ویوها و نیز اسپینر رو یاد بدم. لیستها که خیلی در اندروید کاربرد دارن. از جمله لیست مخاطبها، تلگرام، یا هر لیستی که تقریبا در 90 درصد برنامه­های اندرویدی مشاهده میکنید. اسپینرها هم برای انتخاب یک آیتم از یک منوی کشویی هست. در جلوتر متوجه میشید.

  1. اسپینرها در اندروید:

فرض کنید میخواهیم چنین چیزی داشته باشیم:

آموزش برنامه نویسی اندروید

اسپینرها برای اینکه مقدار داده های نمایشی خودشون رو داشته باشند از آرایه ها استفاده میکنند. یعنی شما ابتدا یک آرایه ایجاد میکنید و بعد آن را به 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 شروع میشود)

آموزش برنامه نویسی اندروید

  1. لیست ویوها

خب ابتدا باید تگ آن را ایجاد کنیم. مثلا:

آموزش برنامه نویسی اندروید

کدش دقیقا مثل چیزی هست که کار کردیم! تنها باید یک layout مناسب برای آن انتخاب کنیم. مثلا:

آموزش برنامه نویسی اندروید

و اما کد زیر رو ببینید:

آموزش برنامه نویسی اندروید

متد اول هنگام کلیک کردن روی یک آیتم هست. و برای گرفتم آن آیتم از ورودی i از متد استفاده کردم. مثل اسپینر این ورودی شماره آیتم انتخاب شده را نشان میدهد. پس با متد getItemAtPosition و دادن مقدار i تونستم این مقدار را بگیرم.

اما متد دوم... این متد هنگامی صدا زده میشود که شما برای مدت طولانی تری از یک کلیک انگشت خود را روی یکی از آیتم های لیست نگه دارید. در اینجا پیام متفاوت تری نشان دادم تا تفاوت را ببینید:

آموزش برنامه نویسی اندروید

خب ادامه بحث لیست ویوها برای جلسه آینده. خسته نباشید

کلمات کلیدی