본문 바로가기
모바일개발(Mobile Dev)/안드로이드개발(Android)

Button Event Case

by 테크한스 2016. 9. 9.
반응형



Button Event Case





package com.example.administrator.eventhandlingapplication;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Button;

public class EventHandlingActivity extends AppCompatActivity implements View.OnClickListener {

    TextView mTextView1;
    Button mButton1;
    Button mButton2;
    Button mButton3;
    Button mButton4;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_event_handling);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG).setAction("Action", null).show();
            }
        });

        mTextView1 = (TextView)findViewById( R.id.textView1 );
        mButton1 = (Button)findViewById( R.id.button1 );
        mButton2 = (Button)findViewById( R.id.button2 );
        mButton3 = (Button)findViewById( R.id.button3 );
        mButton4 = (Button)findViewById( R.id.button4 );

        mButton1.setOnClickListener(
            new View.OnClickListener() {
                public void onClick( View v ) {
                    mTextView1.setText( "From Button1");
                }
            }
        );

        mButton2.setOnClickListener( this );

        mButton3.setOnClickListener( MyOwnListener );
    }

    public void onClick( View v ) {
        mTextView1.setText( "From Button2" );
    }

    Button.OnClickListener MyOwnListener = new View.OnClickListener() {
        public void onClick( View v ) {
            mTextView1.setText( "From Button3" );
        }
    };

    public void MyOnClick( View v ) {
        mTextView1.setText( "From Button4" );
    }

    @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_event_handling, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

Shift+F10를 눌러서 “Device Chooser”를 띄우고, Button1, Button2, Button3, Button4를 클릭하면 각각 “From Button1”, “From Button2”, “From Button3”, “From Button4″가 출력되는 것을 확인할 수 있다.eventHandlingResult

이상 이벤트를 처리하는 대표적인 4가지 방법에 대한 예제를 작성해보았다.

첫 번째 방법은 OnClickListener를 새로 생성하여 해당 뷰 객체(여기서는 Button1)의 이벤트 리스너로 등록해주는 방식이다.  가장 기본적으로 사용되는 이벤트 처리 방식이다.

두 번째 방법은 OnClickListener implement하여 구현하는 방법이다. 이 방법을 사용하기 위해서는 반드시 위의 소스코드에서처럼 implements View.OnClickListener부분이 추가되어야 한다. OnClickListener의 인자로 현재 액티비티(this)를 넘겨주고 OnClick(View v) 함수를 따로 구현해주면 된다. 첫 번째 방법에 비해 코드가 깔끔해서 많이 사용되는 방식이다.

세 번째 방법은 리스너를 객체로 선언(여기서는 MyOwnListener)하여 set하는 방식이다. 이 역시 많이 사용되는 방식이다.

네 번째 방법은 이벤트 리스너(event listener)를 사용하지 않고 XML의 onClick 속성을 이용하는 방법이다. 가장 간단한 방법이기는 하지만 다른 방법들에 비해 기능상의 제약이 있다. Java 소스코드에 XML의 onClick에 입력한 이름의 함수를 작성(이 예제에서는 MyOnClick 함수)하면 해당 버튼 클릭시 이 함수가 호출된다.

4가지 방법 모두 대상 뷰가 어떤 것인지를 전달 받기위해 onClick 함수의 입력 인자로 View v를 받는다.

반응형