مقدمه ای بر 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 دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

-- بارگیری کد امنیتی --