본문 바로가기

모바일/안드로이드

[Android Studio] 이벤트(클릭, 드래그 등) 처리

리스너를 구현하는 방법

1. Activity가 interface를 implement 하는 방법

-> 버튼을 비롯한 안드로이드의 모든 위젯들은 클릭 이벤트 리스너 등록 가능

    타입은 interface로 android.view.View.OnClickListener

public interface OnclickListener {
	void onClick(View v);
}

-> implement 해야 할 함수는 void onClick(View v) 이며 파라미터로 전달되는 View는 클릭 이벤트가 일어난 view

 

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
	private TextView;
    private Button buttonAdd;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 
   textView = findViewById(R.id.textView);
   textView.setText("Simple Calculator!!");
   
   editTextNum1=findViewById(R.id.editTextNum1);
   editTextNum2=findViewById(R.id.editTextNum2);
   
   buttonAdd=findViewById(R.id.buttonAdd);
   buttonAdd.setOnClickListener(this);
 }

 

2. Interface type의 익명 객체 리스너를 추가하는 방법

 

1) 전통적인 방법

buttonSub=findViewById(R.id.buttonSub);
buttonSub.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    float num1=Float.parseFloat(editTextNum1.getText().toString());
    float num2=Float.parseFloat(editTextNum2.getText().toString());
    textView.setText(String.valueOf(num1-num2));
  }
});

 

 

2) 람다식 구현

buttonSub=findViewById(R.id.buttonSub);
buttonSub.setOnClickListener((v)->{
  float num1 = Float.parseFloat(editTextNum1.getText().toString());
  float num2 = Float.parseFloat(editTextNum2.getText().toString());
  textView.setText(String.valueOf(num1-num2));
});

 

 

3. Interface type의 객체를 사용하는 방법

private Button buttonAdd, buttonSub, buttonMul, buttonDiv;
private View.OnClickListener listener = new View.OnClickListener(){
  @Override
  public void onClick(View v) {
    float num1=Float.parseFloat(editTextNum1.getText().toString());
    float num2=Float.parseFloat(editTextNum2.getText().toString());
    textView.setText(String.valueOf(num1*num2));
  }
};

onCreate 함수에 코드 추가

buttonMul=findViewById(R.id.buttonMul);
buttonMul.setOnClickListener(listener);

 

 

4. 클릭 이벤트에 한해: Activity에 지정된 양식의 함수를 만들어 사용하는 방법

 

MainActivity에 다음 함수 추가

public void onDivision(View v){
  float num1=Float.parseFloat(editTextNum1.getText().toString());
  float num2=Float.parseFloat(editTextNum2.getText().toString());
  if(num2==0) textView.setText("Divided by zero");
  else textView.setText(String.valueOf(num1/num2));
}

activity_main.xml 파일에서 @+id/buttonDiv 항목에 다음 코드 추가

<Button
  android:id="@+id/buttonDiv"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="/"
  android:onClick="onDivision"
  app:layout_constraintEnd_toEndOf="parent"
  app:layout_constraintStart_toStartOf="parent"
  app:layout_constraintTop_toBottomOf="@+id/buttonMul" />