반응형
옵션 메뉴에 대해서 그 것이 있다고만 알고 있었지
활용한 기억이 거의 없었다.
요번에 어플을 제작하는데, 옵션 메뉴를 활용하려고 보니, 이 메뉴 값이
한번 잡히면 변경이 되지 않아서 몇시간 동안 삽질을 했다.
이상하서 메뉴에 관해서 검색을 해보니, 원래 onCreateOptionsMenu메서드는 한번만
실행한다는 점을 깜빡 잊고 있었다.
(Create가 들어가는 메서드는 1회 호출이라고 생각하면 편할 것 같다.)
반면에 onPrepareOptionsMenu메서드는 옵션메뉴를 호출할 때마다
실행이 된다. 즉 이 메서드를 통해 메뉴의 내용도 변경이 가능한 것이다.
단순하게 다음과 같은 코드로 구성해 보았다.
@Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); return true; } @Override public boolean onPrepareOptionsMenu(Menu menu){ menu.removeItem(1); String version = ""; try { PackageInfo i = getPackageManager().getPackageInfo(getPackageName(), 0); version = i.versionName; //t_version.setText("현재버전:"+version); } catch(NameNotFoundException e) { } menu.add(0,1,0,"현재버전:"+version); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case 1: Toast.makeText(getApplicationContext(), "현재 설치된 버전입니다.", Toast.LENGTH_SHORT).show(); return true; } return false; }
하지만 조금 아쉬운 점이 있었다.
모든 엑티비티에서 이 옵션메뉴를 공통적으로 써야하는데,
일일이 카피해줄 수는 없는 노릇이다라는 생각이 들었던 것.
마침, 검색을 통해서 CommonActivity를 작성해서
그녀석을 상속(extend)받아 사용하면 시간도 코드도 절약하여
작성할 수 있다는 것을 알았다.
public class BaseActivity extends Activity { @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); return true; } @Override public boolean onPrepareOptionsMenu(Menu menu){ menu.removeItem(1); String version = ""; try { PackageInfo i = getPackageManager().getPackageInfo(getPackageName(), 0); version = i.versionName; //t_version.setText("현재버전:"+version); } catch(NameNotFoundException e) { } menu.add(0,1,0,"현재버전:"+version); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case 1: Toast.makeText(getApplicationContext(), "현재 설치된 버전입니다.", Toast.LENGTH_SHORT).show(); return true; } return false; } }
BaseActivity라는 껍데기를 만든 것이다.
이제 다른 엑티비티에도 Activity대신에 BaseActivity를 상속받아서 사용하면 되는 것이다.
뭐. ListActivity처럼 비슷한 녀석인데 조금 다른 녀석이 있다면
거기에 해당하는 BaseActivity를 만들어 동일하게 처리해줌으로써
이 이슈를 해결할 수 있다.
반응형
'호구지책 > Java/Android ' 카테고리의 다른 글
[안드로이드] ArrayList 에서 remove 사용 시 에러 발생 (0) | 2016.07.05 |
---|---|
[java] NoRouteToHost 호스트로 갈 루트가 없음 에러 (0) | 2016.06.15 |
[안드로이드] dp 를 px 변환하기 (0) | 2016.06.13 |
[안드로이드] 이클립스 실행오류 (0) | 2016.05.19 |
[안드로이드] 메모리 릭 (0) | 2015.10.21 |
[안드로이드] 사진 중복 저장 이슈 (0) | 2015.09.01 |
[안드로이드] 앱 완전 종료 (0) | 2015.09.01 |
[JAVA] Log4j (0) | 2015.08.28 |
댓글