对于我正在开发的音乐播放器,我正在尝试找出实现“祖先”和“临时”导航(使用向上按钮和后退按钮)的最佳方式。
目前,用户会看到一个viewpager,并且可以在三个主要片段(ArtistMain、AlbumMain 和SongMain)之间进行分页。在该视图中选择一个项目后,会发生片段事务,并且 viewpager 会消失,并被新片段(AlbumSub、Songsub 或播放器,取决于用户来自何处)替换。然后用户可以更深入地导航,直到选择一首歌曲,然后他们被带到“播放器”屏幕。
我想问题是:如何实现所有这些条件导航?
总的来说,我对 android 和编程还很陌生,而且我似乎无法想出一种有效的方法来实现这一点。目前,随着每个片段的出现,应用程序正在检查用户刚刚从哪里来,然后确定如果返回或回家,用户应该被带到哪里。这意味着我有一个像“fromArtistMain”,“fromAlbumSub”这样的布尔值,我正在检查像“fromSongSub && fromPlayer”这样的东西。这一切都变得有点混乱。
我画了一张图(在油漆中,对不起!!),来描绘我想要实现的导航。黄色代表“向上”按钮按下,红色是“返回”按钮按下,蓝色只是正常导航。绿色箭头表示视图分页:
欢迎任何建议。这可能需要一些我刚刚忽略的非常简单的东西。
谢谢你的时间。
编辑:
我一直在向后台堆栈添加片段,并使用 popBackStack() 调用,问题是弹出后台堆栈不一定是每种情况下的正确选项。
我目前有一大堆代码试图确定是否应该首先将事务添加到后台堆栈。
考虑以下情况:用户直接从“SongMain”中选择一首歌曲,并被带到“播放器”。现在应该(在我看来)使用主页按钮,将用户带到 SongSub(所选歌曲所属专辑中的歌曲列表)。现在,如果用户再次向上导航,他们将被带到“AlbumSub”,即该艺术家的专辑列表。这是一个片段事务,但添加到后台堆栈将意味着用户将在后台按下时降低一个级别(我认为这是出乎意料的)。所以在这种情况下,我不会将该特定事务添加到后台堆栈 - 看起来很好,但是有很多不同的情况,并且结合顶部需要进出可见性的 viewpager,代码变得真的凌乱。
所有这一切都意味着一大堆条件决定用户来自哪里以及他们到达那里的路径。
在主机活动中根据用户导航的位置设置一堆布尔值,然后检查这些布尔值以查看是否应将事务添加到后台堆栈中是否明智?这是我已经拥有的,但似乎效率很低。