안드로이드 개발 질문/답변
(글 수 45,052)
프레임 레이아웃 안에, 리스트뷰와 렐러티브 레이아웃을 겹쳐놓았습니다.
렐러티브 레이아웃 안에 이미지버튼 3개를 넣고, 버튼 바라고 했습니다(이것은 임의적인 명칭입니다).
버튼 바가 리스트뷰를 가려서, 리스트 아이템을 클릭 못하는 경우가 있기 때문에, 옵션메뉴에 토글 기능을 넣으려 합니다.
레이아웃이 가시 상태일때 숨기기 버튼을, 비가시 상태일때 보이기 버튼으로 기능하게 하려 해서, 이렇게 코딩해 봤습니다.
RelativeLayout layout_mi = (RelativeLayout)findViewById(R.id.relativeLayout2); // 렐러티브 layout_mi
public boolean onCreateOptionsMenu(Menu menu) { // 옵션메뉴
MenuItem item = menu.add(0, 1, 0, "종료");
item.setAlphabeticShortcut('a');
if(layout_mi.getVisibility() == View.VISIBLE){ // 버튼 바의 가시 상태에 따라
menu.add(0, 2, 0, "버튼 바 감추기"); // 비지블이면 감추기 버튼 표시
}else{
menu.add(0, 2, 0, "버튼 바 보이기"); // 인비지블이면 보이기 버튼 표시
}
return true;
} public boolean onOptionsItemSelected(MenuItem item) { //옵션메뉴 버튼들 기능 설정
switch (item.getItemId()) {
case 1:
back_popup();
return true;
case 2:
layout_mi.setVisibility(View.INVISIBLE);
return true;
case 3:
layout_mi.setVisibility(View.VISIBLE);
return true;
}
return false;
}그런데 빌드해 본 결과, NullPointerException이 뜨더군요.
대충 디버깅을 해보니, 에러의 원인은 첫 라인
RelativeLayout layout_mi = (RelativeLayout)findViewById(R.id.relativeLayout2);
이게 NullPointerException을 일으키는 것 같습니다.
왜 이런 문제가 발생하는지, 해결법은 없는지 알고싶네요.
초보 개발자에게 힘이 되어주세요!!^^
2012.02.09 15:29:48
RelativeLayout layout_mi = (RelativeLayout)findViewById(R.id.relativeLayout2);가 문제인데요
findViewById해서 View를 가져오려면 setContentView를 호출이 된 후에 해야 됩니다.
아직 화면에 등록도 안됐는데 호출을 해서 null을 리턴합니다.
2012.02.09 16:25:57
onCreate() 에 setContentView 할 레이아웃은 보통 기본 생성된것들은 main.xml이 됩니다.
임의로 변환을 하셨다면 AndroidManifest에 선언 까지 하셨을거구요
AndroidManifest에 보시면 Intent Category가 LAUNCHER로 선언되어있는 액티비티가 바로 main액티비티가 됩니다.
어플 실행시 보여줄 액티비티가 되는거죠
현재 하신 작업에서 프레임 레이아웃에 리니어 레이 아웃과 리스트뷰를 넣으셨다고 하니 액티비티는 하나로 추정 됩니다.
그 작업을 하신 xml파일을 setContentView(R.layout.파일명)을 하시면 됩니다.
setContentView를 하고 나서야 해당 뷰들의 id로 속성을 가져올 수 있습니다.



