본문 바로가기

나의 플랫폼

[ Android ] ActionBar onOptionsItemSelected 관련해서

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

ActionBar에 Navi 관련 되서 적어 놓을 생각 입니다.

중심 내용은 PreferenceActivity와 PreferenceFragment를 사용했을 때 방법입니다.


ActionBar에 button을 눌렀을 때 이벤트를 발생하고자 할 경우에는 다음과 같은 설정이 필요합니다.

1. OnCreate함수에서 아래 부분의 세가지 선택사항이 있습니다.

@Override

public void onCreate(Bundle savedInstanceState) {

...

        // ActionBar에 Home 버튼 표시 할 떄 "<" 부분을 표시 할 지 결정하는 함수

        getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);

        // Home 버튼을 Enable /  Disable 할지를 결정

        getActivity().getActionBar().setHomeButtonEnabled(true);

        // OptionMenu를 사용할지 결정 

        // 이 부분을 설정해줘야 onCreateOptionsMenu 함수가 호출 됩니다.

        setHasOptionsMenu(true);

}


2. 설정이 완료 되었으면 onOptionsItemSelected 함수를 overriding 만 해주면 사용이 가능합니다.

@Override

    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {

           case android.R.id.home:

             // doing something

           return true;

        }

        return false;

    }


이때!!! 중요한 사항을 지금 말씀 드리겠습니다.

아시겠지만 PreferenceFragement는 단독으로 실행되는 게 아니라 PreferenceActvity 내부에서 화면을 분할 시켜 사용하는 것이지요. 따라서, overriding 되는 함수는 부모인 PreferenceActvity 를 거쳐 실행이 되게 됩니다.

만약! PreferenceActvity 부분에서 

@Override

    public boolean onOptionsItemSelected(MenuItem item) {

             // doing something

           return true;

    }


위와 같이 return을 true 막게 될 경우 자식인 PreferenceFragement 에서는 onOptionsItemSelected 함수가 호출이 되지 않는 상황이 일어 납니다.!!!( 3일간.. 힘들었음..)


꼭 PreferenceActvity 에서 overriding 해서 함수를 사용할 경우, PreferenceFragement와 상관 관계를 생각해보고 진행하시길 바랍니다.


Java의 기초인 부분인데... 소스가 많거나 복잡할 경우 위 사항을 파악하는데 시간이 걸리더라구요.

그럼 오늘도 즐코딩!