onClick

2020. 10. 6. 00:20컴퓨터 수업/Android studio

copycoding.tistory.com/47?category=1027251

 

Category:

1. XML에서 함수명 선언해서 이용,

2. XML에서 id만 선언하고 java랑 연결해서, java에서 onClick에 대한 메소드를 선언하기위해 new 객체를 만들기

 

 

1.XML에서 함수명 선언해서 이용

 

#xml

android:onClick = "함수명"

이 말이 무슨말이냐면

 

해당 버튼을 클릭하면 (onClick) 함수명으로 지은 함수쪽으로 (java에 있다.)

해당 클래스 (ex. TextView, Button 등을 argument로 보내겠다는 뜻이다.)

 

#java

public void ButtonClicked(View view) {
    if (view.getId() == R.id.button1) {
        Toast.makeText(this, "도우너 어서오고", Toast.LENGTH_SHORT).show();
    } else if (...)
}

함수명은 당연히 "ButtonClicked"로 지었을 것이다. 안그러면 XML에서 java의 함수를 찾을 수 없다!

그리고, parameter를 보면, View view 라고 되어있는데

 

datatype name이니 겁먹을 필요가 없다.

 

따라서, View view = 버튼을 클릭해서 아규먼트로 전달 된 해당 뷰, 가 될것이다.

 

이젠, 이 view의 메소드를 이용해서 사용하기만 하면 될 것이다.

 

+)여기선 if else 분기를 통해, view의 id를 확인하고 분기시켰다. 

 

따라서, XML에서 각 버튼마다 다른 onClick의 함수를 지정해줬다면 당연히 각각 다른 id를 가지겠지만

 

이런식으로 보낸경우 각각의 id로 분기시켜야한다.

 

보통 이 경우에 id로 나누고 싶지 않을 때 이렇게 한다. 따라서 다음과 같은 expression도 가능하다.

 

public void ButtonClicked(View view)
{
    Button button1 = (Button)view;
    하고 그냥 여기서 button1 을 쓰는건데 굳~이 view를 안쓰는 이유가 뭘까 책은...
}

 

캐스팅을 통해 안정성 확보인강...

 

ㄴㄴ 그 view를 안쓸때가 문제인거야

 

예를들어 password를 edittext를 통해 입력받고, button을 클릭했을 때 그게 보고싶으면

 

함수로 button을 전달한다고해서 뭐 의미가 있는게 아니잖아

 

++)Toast 얘기

 

Toast.makeText(this,"하고싶은말",얼마나 떠있을지).show(); 인데

 

이는 Toast를 makeText로 초기화 한 뒤, show 메소드를 사용하는 것이다. 즉,

 

Toast toast = Toast.makeText(this,"초능력 맛 좀 볼래?",Toast.LENGTH_SHORT);

toast.show();

 

이렇게!

 

2. XML에서 id만 선언하고 java랑 연결해서, java에서 onClick에 대한 메소드를 선언하기위해 new 객체를 만들기

 

    Button button1;

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

        button1 = (Button)findViewById(R.id.button1);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(this,"대마초",Toast.LENGTH_SHORT).show();
            }
        });

 

여기서 문제,

 

button1.setOnClickListner는 반드시 onCreate 메소드 안에 있어야한다. (O/X)

 

O

 

해당 앱이 실행되자마자 연결이되고, 객체가 생성되어야하기 때문에, O이다.