[Android] 버튼을 사용하자

Posted on Updated on

Button button = (Button) findViewById(R.id.button);

//버튼형 인스턴스 button 을 만든다.
// findViewById라는 메서드를 실행한다. 인자는 R.id.button 을 넣어준다.

//R.id.button 은 Resource의 xml에서 button 이라는 id라는 가진 뷰를 찾아준다는 것인데

그렇다면 xml 파일이 여러 개 있으면 어떻게 될까?

실험 결과 별다른 오류 없이 잘 실행된다.

한 가지 발견한 사실은

java soruce 의 이름이 MainActivity이며 그에 상응하는 xml 파일은 activity_main.xml 이라는 것이다. 이름으로 이것들이 짜고 치는 고스톱을 펼치는 것 같다.

한 번 activity_main.xml의 이름을 강제로 바꾸는 실험을 해 보기로 한다

실험결과 : 실패

다름 아니라 이름이 바뀌지 않는다. 그렇다면 다른 가정을 세워 본다.

XML의 파일 이름으로 찾아가는 것이 아니라, 현재 화면에 띄워진 액티비티(화면) 기준으로, 그 화면을 구성하는 xml 파일에서 제공하는 id 와 매칭하지 않을까?

실험을 위해서 AndroidMenifest.xml파일을 뜯어 고쳐 보기로 한다.

음.. 모르겠다. 어딜 고쳐야 처음 진입하는 액티비티를 수정할 수 있는지 … 분명 책에서 봤는데 까먹었다.

일단 모르는 부분을 모르는 대로 그냥 두기로 한다 (생활코딩 이고잉님의 방식처럼)


원래대로 돌아와 button 인스턴스의 setClickListener를 실행한다.

button.setOnClickListener(new View.onClickListener(){});

메서드를 보면 인자에 new View.onClickListener(){}를 넣어주는 것을 볼 수 있다. C와 C++만 주로 다뤘던 내가 위의 문장을 보고 당황하는 것은 당연할 것이다. (c++에도 위의 문법이 있다면 참 나는 공부를 다시 해야할 것 같다)

자바스크립트에서도 저런 문법을 본 적 있는 것 같다. 위의 저 문법을 내 맘대로 해석해보면

View.onClickListener(){}

…. 잘 해석이 안된다.

이걸 어떻게 해석해야 하는지 구글링을 하고 와야겠다.

위의 인자를 View.onClickListener(){}를 전달해야 하는데 이대로 끝내면 오류가 발생하고 만다. 저 중괄호 안에 또 메서드 하나를 추가해 줘야 한다.

@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(), “버튼이 눌렸습니다”,   Toast.LENGTH_LONG).show();
}

위의 구문이 중괄호 안에 들어가 자리를 차지하고 있어야 제대로 동작이 된다. 이클립스나 안드로이드 스튜디오 같은 자바에 적용되는 IDE를 봤을 때 위 처럼 @Override 라는 단어가 휙 자동으로 뜨기도 하는데, 자동으로 만들어주는 가상의 주석같은 것인가 보다. 보통 슬래쉬 두 개 // 이렇게 붙여서 주석을 하는데 Override 의 경우 저렇게 붙는 것이다.

어땠든 위의 두 문장을 합쳐, 결과적으로 다음과 같이 코딩을 해 줘야 오류없는 문장을 완성할 수 있다.

Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.onClickListener(){
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(), “버튼이 눌렸습니다”,   Toast.LENGTH_LONG).show();
}
});

암호 해석하는 것도 아니고 어렵다.. 조금 더 깊게 이해하면 왜 저렇게 짤 수 밖에 없었는지 알 수 있겠지?

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중