리스너를 구현하는 방법
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" />
'모바일 > 안드로이드' 카테고리의 다른 글
[Android Studio]Activity 와 Intent (0) | 2021.04.04 |
---|---|
[Android Studio] View Binding (0) | 2021.04.04 |
[Android Studio] Widget (0) | 2021.04.03 |
[Android Studio] Layout (0) | 2021.04.03 |
[안드로이드 스튜디오] 스낵바(Snack bar), 대화상자(dialog) -hoyhi-tistory (0) | 2021.03.10 |