2016-12-28 3 views
0

내 조각에서 가로 모드로 툴바에 내 Menu/MenuItems 만 표시하려고합니다. 오리엔테이션을 바꿀 때 onCreateOptionsMenuonPrepareOptionsMenu이 호출되지 않는다는 것을 알았습니다. 내가 가로 모드을 시작 때 즉onCreateOptionsMenu 및 오리엔테이션 변경시 onPrepareOptionsMenu가 호출되지 않음

내 메뉴 항목 내 가로 레이아웃에서만 작동하지만, (세로에서 가로로 변경할 때 충돌) 나 가로 모드로 변화하려고하지 않을 때. 내가 onPrepareOptionsMenu()가 호출되지 않습니다 때문에 나는 initializeLandscapeMenuViews()에 초기화 뷰를 액세스 할 때

public class MyFragment extends Fragment 
{ 
    private int orientation; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     orientation = getResources().getConfiguration().orientation; 
     if (orientation == Configuration.ORIENTATION_LANDSCAPE) 
      setHasOptionsMenu(true); 

     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 
    { 
     if (orientation == Configuration.ORIENTATION_LANDSCAPE) 
      inflater.inflate(R.menu.my_menu, menu); 

     super.onCreateOptionsMenu(menu, inflater); 
    } 

    @Override 
    public void onPrepareOptionsMenu(Menu menu) 
    { 
     initializeLandscapeMenuViews(menu); 
     super.onPrepareOptionsMenu(menu); 
    } 

    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState) 
    { 
     super.onViewCreated(view, savedInstanceState);   
     if (orientation == Configuration.ORIENTATION_PORTRAIT) 
      initializePortraitMenuViews(view); 
    } 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     return inflater.inflate(R.layout.my_layout, container, false); 
    } 

// other code not shown 
} 

충돌

가 발생합니다.

나는 디버거를 사용하여 호출의 순서 확인 : 가로 모드에서 시작

  1. onCreate
  2. onViewCreated
  3. onCreateOptionsMenu
  4. onPrepareOptionsMenu
다음 16,

,

  1. onCreate
  2. onViewCreated

다음 세로로 방향 변경, 다시 풍경

  1. onCreate
  2. onViewCreated
  3. 에 방향 변경

onCreateOptionsMenuonPrepareOptionsMenu은 내가 무엇을 놓치고

를 호출되지? (도움을 주시면 감사하겠습니다).

답변

0

기본적으로 나는 당신의 접근 방식에 어떤 문제도 보이지 않는다. 그럼 invalidateOptionsMenu()를 호출 해 보았습니까? onCreateOptionsMenu()를 호출하여 메뉴를 다시 그리려는 OS에 알려야한다고 가정합니다.

+0

안녕하세요 @ 아이다 네츠, 실제로 시도했지만 그 콜백은 호출되지 않습니다. ( – Vinnie

-1

편집 : TS가 활동을하고 있다고 생각했지만 그는 조각을 사용하고 있습니다. 죄송합니다.

활동으로 작업하는 경우 : onCreateOptionsMenuonPrepareOptionsMenu에는 부울 반환 값이 있습니다. 따라서 void 대신 boolean을 반환 할 필요가 없습니다. 현재 접근 방식에서는이 때문에 함수를 재정의하지 않습니다. 그래서 함수가 호출되지 않는 것 같습니다. 자세한 내용은 API을 참조하십시오.

+0

질문을주의 깊게 읽으십시오. '활동'이 아닌 '단편'을 확장 중입니다. – Vinnie

+0

네 말이 맞아, 나는 그 부분을 놓쳤다. 죄송합니다. – Richh94

관련 문제