2014-10-30 2 views
3

박격포에서는 표시되는 화면에 따라 변경되면 사람들이 ActionBar를 어떻게 처리하는지 궁금합니다. 예를 들어 특정 화면이 표시 될 때 ActionBar 제목이나 동작을 변경하려고한다고 가정 해보십시오.Mortar의 ActionBar 소유자

액티비티 삽입은 끔찍한 생각처럼 보이고, 화면 회전 후에 올바른 동작 표시 줄을 가져올 수있는 발표자 (또는 뷰)를 원하게됩니다.

내가 누락 된 특히 효과적인 패턴이 여기 있습니까? 내가 해왔 던 모든 해결책들이, 그러나 내가 바라던 것보다 더 어색하다.

답변

1

행동의 경우, 흐름 샘플 응용 프로그램의 MainActivity는 다음과 같습니다

public boolean onCreateOptionsMenu(Menu menu) { 
    ... 
    Object screen = AppFlow.get(this).getBackstack().current().getScreen(); 
    ... 

public void go(Backstack nextBackstack, Flow.Direction direction, Flow.Callback callback) 
    Screen screen = (Screen) nextBackstack.current().getScreen(); 
    ... 

두 가지 방법이 표시 될 화면의 알고 있습니다. 액션은 go()의 제목 인 onCreateOptionsMenu()에 정의됩니다. 문제는이 모든 것이 MainActivity에 위치한다는 것입니다.

public boolean onCreateOptionsMenu(Menu menu); 

그리고 방법과 TitleEnabledScreen 인터페이스 :

public void getTitle(); 

귀하의 활동이 다음과 같을 것이다

은 당신이 할 수있는 것은 방법으로 ActionEnabledScreen 인터페이스를 만드는 것입니다 :

public boolean onCreateOptionsMenu(Menu menu) { 
    ... 
    Object screen = AppFlow.get(this).getBackstack().current().getScreen(); 
    if (screen instanceof ActionEnabledScreen) { 
    return ((ActionEnabledScreen)screen).onCreateOptionsMenu(menu); 
    } 
    ... 

public void go(Backstack nextBackstack, Flow.Direction direction, Flow.Callback callback) 
    Screen screen = (Screen) nextBackstack.current().getScreen(); 
    if (screen instanceof TitleEnabledScreen) { 
    setTitle(((TitleEnabledScreen)screen).getTitle()); 
    } 
    ... 

위의 코드를 실행하지 않았으므로 컴파일되지 않았을 수도 있지만 아이디어가 표시되기를 바랍니다. 목표는 새 스크린을 구현할 때 MainActivity가 선형 적으로 확장되는 것을 방지하고 화면 클래스를 직접 참조해야하는 번거 로움을 피하는 것입니다.

희망이 도움이됩니다.

+0

아, 물론 맞춤 제목을 제공하려는 화면은 TitleEnabledScreen을 구현합니다. 사용자 정의 액션을 제공하려는 스크린은 ActionEnabledScreen을 구현합니다. 되돌아 갈 때 (즉, TitleEnabledScreen을 구현하는 마지막 화면에 대한 백 스택 검색) 문제를 피하기 위해 제목 부분에 더 많은 백 스택 작업이 필요할 수 있습니다. – mrlem