mortar - Mortar 中的 ActionBar 所有者

标签 mortar

在 Mortar 中,如果 ActionBar 根据显示的屏幕发生变化,我很好奇人们如何处理它。例如,假设您想要在显示特定屏幕时更改 ActionBar 标题或操作。

注入(inject) Activity 似乎是个糟糕的主意,并且您希望演示者(或者我想是 View )能够在屏幕旋转后获得正确的操作栏。

这里有没有我遗漏的特别有效的模式?我的所有解决方案都有效,但比我希望的更尴尬。

最佳答案

对于操作,流程示例应用程序的 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();
  ...

这两种方法都知道要显示的屏幕。 Action 在 onCreateOptionsMenu() 中定义,标题在 go() 中。问题是所有这些都位于 MainActivity 中。

你可以做的是用一个方法创建一个ActionEnabledScreen接口(interface):

public boolean onCreateOptionsMenu(Menu menu);

还有一个带有方法的TitleEnabledScreen接口(interface):

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 在您实现新屏幕时线性扩展,并且不惜一切代价避免直接在其中引用您的屏幕类。

希望这对您有所帮助!

关于mortar - Mortar 中的 ActionBar 所有者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26659868/

相关文章:

android - 将 Flow & Mortar 与 ViewPager 结合使用

android - Mortar:如何将 Presenter 用于列表项/适配器

java - 使用 Mortar + Flow 从对话框中获取用户输入

java - 如何为 MortarActivityScope @Provide 一个 Activity,而不会在方向更改时泄漏 Activity?

android - 如何用 Mortar 处理 onActivityResult()

android - 如何防止迫击炮瞄准镜在屏幕上持续存在?

android - 开始使用/Flow 和 Mortar

android - Square Flow + 砂浆片示例