본문 바로가기
프로젝트 기록/android

[android/안드로이드] Button Click Event 버튼 클릭 이벤트 예제

by 새아SaeA 2020. 1. 3.

안드로이드 버튼 클릭 이벤트 예제

 

버튼 클릭 이벤트에는 3가지 방식이 있다.

  1. 익명 클래스를 사용하여 버튼에 리스너 객체를 설정하는 방법
  2. 버튼 리스너를 액티비티에 구현하고 이 리스너를 버튼에 설정하는 방법
  3. 레이아웃 xml 파일의 button 속성에 onClick요소를 추가하는 방법

 

/res/layout/activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <EditText
       android:id="@+id/edit"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       />
    <Button
       android:id="@+id/button"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="입력"
       />
    <TextView
       android:id="@+id/text"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       />

</LinearLayout>

 

 

/java/com.example.project1/MainActivity.java

 

방법 1. 익명 클래스를 사용하여 버튼에 리스너 객체를 설정

//import생략

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

       final EditText edit = (EditText) findViewById(R.id.edit);
       final TextView text = (TextView) findViewById(R.id.text);
       
       Button button = (Button)findViewById(R.id.button);
       	button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                text.setText(edit.getText());
            }
        });

    }

}

 

방법 2. 버튼 리스너를 액티비티에 구현하고 이 리스너를 버튼에 설정하는 방법

//import생략

public class MainActivity extends AppCompatActivity {
    EditText edit;
    TextView text;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        edit = (EditText) findViewById(R.id.edit);
        text = (TextView) findViewById(R.id.text);
        
        Button button = (Button)findViewById(R.id.button);
        button.setOnClickListener(this);       
    }
    
    @Override
     public void onClick(View view) {
       text.setText(edit.getText());
     }

}

 

 

방법 3. 레이아웃 xml 파일의 button 속성에 onClick요소를 추가하는 방법

/res/layout/activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <EditText
       android:id="@+id/edit"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       />
    <Button
       android:id="@+id/button"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:onClick-"맘대로이름지정"
       android:text="입력"
       />
    <TextView
       android:id="@+id/text"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       />

</LinearLayout>

 

/java/com.example.project1/MainActivity.java

//import생략

public class MainActivity extends AppCompatActivity {
    EditText edit;
    TextView text;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        edit = (EditText) findViewById(R.id.edit);
        text = (TextView) findViewById(R.id.text);      
    }
    
    public void 맘대로이름지정(View v) {
    text.setText(edit.getText());
    }
}

 

+

익명 클래스에서의 final

final은 주로 'final int'와 같이 상수를 만들 때 주로 쓴다. 변하지 않는 값을 지정할 때 쓴다는 것이다.

그리고 익명클래스 내에서는 변하지 않는 값만 쓸 수 있기에 버튼 클릭이벤트 첫 번째 방법에서 final을 안 쓰면 오류가 난다. final을 써서 익명 클래스에 접근할 수 있도록 하기 때문이다. 

 

+

멤버 변수

final 안 쓰려면 onCreate 위에 부분에 쓰면 됨. < 이렇게 쓰는 걸 '멤버 변수'라고 하고. 멤버 변수는 항상 접근할 수 있으니까 가져다 쓰면 된다.