gpt4 book ai didi

mortar - Mortar 中的 ActionBar 所有者

转载 作者:行者123 更新时间:2023-12-01 14:29:58 35 4
gpt4 key购买 nike

在 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/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com