2013-09-22 6 views
1

내 액티비티에는 프래그먼트 컨테이너가 포함되어 있으므로 여러 프래그먼트가 이동됩니다. 나는 액션 바가 현재 조각에 따라 다른 액션 아이콘을 보여주기를 바란다. 예를 들어, 조각 1이 활성 상태 일 때 작업 표시 줄에 탐색 드롭 목록을 표시하고 조각 2가 활성 상태 일 때 아무 것도 표시하지 않으려합니다.작업 표시 줄을 업데이트하는 적절한 이벤트는 무엇입니까?

내 질문은 :

1) 조각 교체시 작업 표시 줄을 업데이트 할 수있는 적절한 이벤트가 무엇입니까?

2) 조각 (2)가 활성으로 될 때, 어떻게 초기 상태로 작업 표시 줄을 복원() 탐색 드롭 목록과 다른 어쩌면 뭔가를 제거?

답변

0

1) 활동에 메뉴에 대한 참조를 저장하십시오. 활동에 개인 재산을 만듭니다

private Menu mMenu; 

2) onCreateOptionsMenu의 메뉴에 대한 참조를 가져옵니다 :

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.test_choice, menu); 
    mMenu = menu; 
    return super.onCreateOptionsMenu(menu); 
} 

3) 그런 다음 필요할 때마다 작업 표시 줄의 항목을 변경 전환 할 수 있습니다 , 예. 여기 당신이 사이에 (작업 표시 줄에서 드롭 다운을 전환 할 수있는 방법, 추가 의견을 바탕으로

private void displayActionBar() { 
    if (mMenu == null) return; 

    if (mQuestionStage) { 
     MenuItem nextItem = mMenu.findItem(R.id.action_testNext); 
     nextItem.setIcon(R.drawable.navigation_accept); 
     nextItem.setTitle(getResources().getString(R.string.action_testCheck)); 
    } else 
    { 
     MenuItem nextItem = mMenu.findItem(R.id.action_testNext); 
     nextItem.setIcon(R.drawable.navigation_forward); 
     nextItem.setTitle(getResources().getString(R.string.action_testNext)); 
    } 
} 

편집

: 나는 작업 표시 줄 항목의 아이콘과 제목을 변경하는 방법을 만들어 보여주고 표시하지 않음).

ActionBar actionBar = getSupportActionBar(); 
    if (actionBar.getNavigationMode() == ActionBar.NAVIGATION_MODE_LIST) 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 
    else 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 
+0

menu.clear()을했다. 나는 Menu를 사용하고 싶지 않다. 조각 1에 대한 작업 표시 줄의 드롭 다운 목록이 필요하며 조각 2가 대체되기 전에 작업 표시 줄에서 드롭 다운 목록을 제거해야합니다. – TieDad

+0

편집 된 답변보기 – Szymon

0

내가 조각의 라이프 사이클과 함께 액션 바 처리보다는 (사용자의 혼란을 초래할 수) 조각 스위치없이 변경할 수 추천합니다 : 당신은 당신이 그것을 필요로하는 코드를 사용할 수 있습니다.

  1. 는 조각의 onCreate() 방법, 당신은 setHasOptionsMenu(true)하여 작업 표시 줄을 변경하려는 활동을 알립니다. 이 문장이 없으면, 당신의 단편 onCreateOptionsMenu()은 그것을 덮어 썼을지라도 호출되지 않을 것입니다.

  2. 변경 모든 단편에서 onCreateOptionsMenu()을 무시하고 onOptionsItemSelected() 방법에서의 응답을 처리하여 액션 바.

  3. 하는 것은 (예를 들어, 액션 바) 다시 키를 누르면 다시 스택을 onBackStackChanged() 방법을 무시하거나 제대로 UI를 처리하기 위해 다른 방법을 사용해야합니다 (당신이 항목을 클릭을 처리하지 않으면 BTW, super.onOptionsItemSelected()를 호출하는 기억) 사용. 자세한 내용은 this android's develop guide article을 참조하십시오.

ps. 간단한 특정 조각에 이전 조각의 액션 바 항목을 제거하려면, 단순히 어쩌면 이것은 내가 원하는 것이 아니다는 onCreateOptionsMenu()

관련 문제