مقدمه ای بر OnClickListeners و روشی دیگر برای تعریف عملکرد دکمه ها در اندروید
یکی از اساسی ترین کارهایی که در هنگام شروع برنامه نویسی برای اندروید پیش می آید این است که چگونه OnClickListener را اجرا کنید. در این پست من به شما روش های مختلف ایجاد OnClickListenersرا با مثال توضیح خواهم داد.
Handler های Onclick برای اجرای یک قسمت از کد ،هنگامی که یک دکمه یا بخش دیگری از رابط کاربر لمس می شود (کلیک می شود) استفاده می شود. این handler های onclick یک نمونه از یک کلاس هستند که باید بطور دقیق عملکرد آن مشخص شود. به طور خلاصه، OnClickListener عملیاتی با یک قطعه از کد اجرایی است که تنها با تعامل کاربر با برنامه ایجاد می شود .اولین چیزی که باید بدانید این است که handler یک onclick رابط کاربری View.OnClickListener را اجرا می کند. از این رو شما باید در گام نخست یک کلاس ایجاد کنید که رابط کاربری را اجرا کند .خوشبختانه این روش بسیار آسان و کاربردی است.
اولین روش ایجاد یک OnClickListener استفاده از روش ذیل می باشد . روشی که علی رغم سادگی ، عملاً در تعریف عملکرد یک یا دو دکمه می تواند مناسب باشد و در برنامه های با دکمه های چندگانه روش چندان مطلوبی بنظر نمی رسد.
findViewById(R.id.btn).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { //Inform the user the button has been clicked Toast.makeText(this, "Button1 clicked.", Toast.LENGTH_SHORT).show(); } }); }
یا روشی که ما اکثراً استفاده می کنیم به شکل زیر است.
Button btn (Button)findViewById(R.id.button1); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(this, "Button1 clicked.", Toast.LENGTH_SHORT).show(); } });
اما در برخی موارد دیده می شود که در یک اکتیویتی بنا به ضرورت برنامه مجبور هستیم از دکمه های بیشتری استفاده کنیم. از این رو استفاده از روش های فوق عملاً باعث آشفتگی و همچنین ازیاد کدهای یک کلاس خواهد شد. بنابراین استفاده از روشی که در ذیل آورده خواهد شده بهترین گزینه در این موارد محسوب می شود. در این روش ما یک کلاسی را ایجاد می کنیم و سپس آن کلاس های مربوط به OnClickListener را ایمپلمنت می کنیم.
public class MainActivity extends Activity implements OnClickListener {
به منظور درک بهتر موضوع بهتر است مثالی در این زمینه مطرح کنیم:
اگر در داخل برنامه اکلیپس یا اندروید استودیو قرار دارید پروژه جدیدی را ایجاد کنید
اکلیپس :File ⇒ New Android ⇒ Application Project
اندروید استودیو :File ⇒ New ⇒ New Project
اما اگر هنوز برنامه خود را باز نکرده اید یکی از برنامه های فوق را باز نموده و بعد از تعیین مشخصات(نامگذاری) ، تعیین حداقل sdk و نوع اکتیویتی (blank یا Empty) ، نام اکتیویتی ابتدایی و اصلی خود را همان MainActivity قرار دهید. بعد از لود کامل برنامه ، در مسیر res ⇒layout لایه متناظر اکتیوتی اصلی یعنی activity_main را پیدا نمود و کدهای مندرج و پیش فرض آن را پاک کرده و کدهای xml زیر را به آن اضافه کنید:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.psrd.myapplication.MainActivity" android:background="#e3d7d7"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="دکمه اول" android:id="@+id/button1" android:layout_marginTop="57dp" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="دکمه دوم" android:id="@+id/button2" android:layout_below="@+id/button1" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="دکمه سوم" android:id="@+id/button3" android:layout_below="@+id/button2" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> </RelativeLayout>
سپس کلاس اصلی یا همان MainActivity را باز کرده و کدهای زیر را در آن قرار دهید:
package com.example.psrd.myapplication; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity implements OnClickListener { Button btn1,btn2,btn3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn1 = (Button) findViewById(R.id.button1); btn2 = (Button) findViewById(R.id.button2); btn3 = (Button) findViewById(R.id.button3); btn1.setOnClickListener(this); btn2.setOnClickListener(this); btn3.setOnClickListener(this); } @Override public void onClick(View v) { // TODO Auto-generated method stub String msg = "شما انتخاب کردید"; if (v.getId() == R.id.button1) { msg = msg + " دکمه اول"; } if (v.getId() == R.id.button2) { msg = msg + "دکمه دوم"; } if (v.getId() == R.id.button3) { msg = msg + "دکمه سوم"; } Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } }
حال می توانید برنامه را اجرا کنید و نتیجه کار خود را ببینید. همانطور که دیده می شود ابتدا دکمه ها بر اساس آیدی برای کلاس تعریف شده اند:
btn1 = (Button) findViewById(R.id.button1); btn2 = (Button) findViewById(R.id.button2); btn3 = (Button) findViewById(R.id.button3);
سپس با فراخوانی کلاس OnClickListener با context مربوط به کلاس مطابقت داده شده اند.
btn1.setOnClickListener(this); btn2.setOnClickListener(this); btn3.setOnClickListener(this);
در نهایت با پیاده سازی متد onclick و با فراخوانی مورد به مورد ایدی هر یک از دکمه ها ، دستورات مورد نظر خود را اعمال کرده ایم.
@Override public void onClick(View v) { // TODO Auto-generated method stub String msg = "شما انتخاب کردید"; if (v.getId() == R.id.button1) { msg = msg + " دکمه اول"; } if (v.getId() == R.id.button2) { msg = msg + "دکمه دوم"; } if (v.getId() == R.id.button3) { msg = msg + "دکمه سوم"; } Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show(); }
0 دیدگاه