앱의 구성의 특징 상 화면전환이 필수이고, 데이터전달과 처리가 필수적이다.

만일 액티비티를 여러개 생성해서 구성할 시, 코드의 중복사용이 커지고, 메모리누수 문제도 커지고(이전의 액티비티를 죽이면 되긴 하겠지만), 데이터의 전달이 번거롭다(외부파일에 저장한 후 로드하는 방식으로 하면 되려나?).

그래서 시작액티비티, 메인 액티비티, 결과 액티비티정도의 세개의 액티비티만 생성하고, 뷰만 전환하는 방향으로 하였다.

그래서 일단 뷰를 생성하고 그 뷰의 버튼으로 새로운 뷰를 로드하는 기능을 우선적으로 구현해보기로 하였다.

임의로 시작 액티비티의 코드라 부르겠다. 버튼을 누르면 메인 액티비티를 인텐트로 불러온다.



다음은 메인 액티비티에 관련된 코드이다.


디버그를 하기 위해 btnpluse1 (스펠이 틀렸네..;;)이라는 버튼을 클릭하면 fire라는 int변수가 증가하는 디버그용 코드를 작성해보았다.

하지만 실행해보니 null point 에러가 발생.

시작 액티비티. 진행하세요 버튼을 누르면 다음 화면이 떠야하는데..

 null point error 발생.


해당 버튼의 참조주소도 분명 R.java에 기록되어있다.

이것 때문에, 쪽팔리긴 하지만, 설 연휴 3일동안 고민하였다. 사실, 프로그래밍을 어디서 배워본 적도 없고, 객체지향은 또 처음인데다가 안드로이드OS를 쓰니 이해가 잘 안되었으리라..  

그래서 뷰체인지 방식으로 새로운 뷰의 버튼을 사용할 수 없다는 괴랄한 생각까지 하였으나, 연휴가 끝나기 3시간전에 불연듯 책을 읽다가 실마리가 보였다.

setContentView(R.layout.main)은 main.xml을 전개하여 '객체'를 전달한다는것.

나는 그 전까지 솔직히 뷰객체는 OS에서 자동으로 생성해주고 관리하는줄 알았다.

더욱이 setContentView에는 new 연산자가 보이지 않았다.

그래서 객체를 생성해주는 코드인지 몰랐던 것이다.

객체의 인스턴스도 생성도 하지 않고, 그 객체의 버튼의 id를 참조하려고 하다보니 에러가 발생한 것이다.

위의 코드를, 새로운 뷰가 생성된 후에 그 뷰의 버튼객체를 정의하고 리스너를 돌려주는 코드로 수정하니..

화면이 뜬다. 버튼을 눌러보면..



의도한 대로, 버튼을 누를 때 마다 fire변수의 값이 증가하는 것을 볼 수 있다.


이제, 기획한 대로 코드를 작성하고, 뷰를 xml을 이용하여 꾸밀 차례다.



 
신고


티스토리 툴바