在迫击炮中,我很好奇人们如何根据所显示的屏幕改变ActionBar。比如说,如果要显示某个屏幕,您想要更改ActionBar标题。
注入一个活动似乎是一个糟糕的想法,你想要一个演示者(或者我认为是视图)能够在屏幕旋转后获得正确的操作栏。
这里是否有一种特别有效的模式我错过了?我工作的所有解决方案,但比我希望的更尴尬。
答案 0 :(得分:1)
对于操作,flow-sample应用程序的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();
...
两种方法都知道要显示的屏幕。这些操作在onCreateOptionsMenu()中定义,go()中的标题。问题是所有这些都位于MainActivity中。
您可以使用方法创建 ActionEnabledScreen 界面:
public boolean onCreateOptionsMenu(Menu menu);
带有方法的 TitleEnabledScreen 界面:
public void getTitle();
您的活动将如下所示:
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线性扩展,并且不惜一切代价直接在其中引用屏幕类。
希望这有帮助!