programing tip

작업 표시 줄 작업을 동적으로 변경하려면 어떻게해야합니까?

itbloger 2020. 11. 30. 07:55
반응형

작업 표시 줄 작업을 동적으로 변경하려면 어떻게해야합니까?


ActionBar 및 탭 탐색이있는 활동이 있습니다. 분할 모드를 사용하고 있으므로 탭이 상단에 있고 작업이 하단 표시 줄에 있습니다. 하단 동작을 어떻게 동적으로 변경할 수 있습니까? 탭마다 동작이 다르기 때문에 필요합니다.


작업은 활동의 옵션 메뉴로 채워 지므로을 사용할 수 있습니다 Activity#invalidateOptionsMenu(). 이것은 현재 메뉴를 덤프하고 다시 빌드하기 위해 활동의 onCreateOptionsMenu/ onPrepareOptionsMenu메소드를 다시 호출합니다 .

작업 표시 줄 탭을 사용하여 조각 구성을 변경하는 경우 더 나은 방법이 있습니다. 각 조각이 메뉴의 자체 부분을 관리하도록합니다. 이러한 조각은 setHasOptionsMenu(true). 옵션 메뉴 항목이있는 프래그먼트가 추가되거나 제거되면 시스템은 자동으로 옵션 메뉴를 무효화 하고 활동 외에도 각 프래그먼트의 onCreateOptionsMenu/ onPrepareOptionsMenu메소드를 호출합니다 . 이렇게하면 각 프래그먼트가 자체 항목을 관리 할 수 ​​있으며 수동으로 메뉴 전환을 수행하는 것에 대해 걱정할 필요가 없습니다.


Activity.invalidateOptionsMenu () 에는 API 레벨 11이 필요합니다. 이전 버전과 호환되는 더 간단한 솔루션이 있습니다.

처음에는 MenuItem을 메뉴에 추가하지만 가시성false로 설정하십시오 . MenuItem.setVisible ()을 사용하여 원하는 경우 가시성을 true로 설정합니다.


ActionMode.invalidate () 가 트릭을했습니다. 이로 인해이 onPrepareActionMode()다시 호출되었습니다.

Activity#invalidateOptionsMenu()않았다 하지 가 원인 onPrepareActionMode()다중 선택과 목록 항목을 사용할 때 호출 할 수 있습니다.


Activity.invalidateOptionsMenu()API 레벨 11이 필요합니다 . supportInvalidateOptionsMenu () 의 지원 라이브러리 버전을 사용하십시오 .

AppCompatActivity activity = (AppCompatActivity) getActivity();
activity.supportInvalidateOptionsMenu();

참고 URL : https://stackoverflow.com/questions/8279981/how-can-i-change-action-bar-actions-dynamically

반응형