gpt4 book ai didi

android - 如何在 Android 中构建类似 UINavigationController 的行为?

转载 作者:行者123 更新时间:2023-11-29 19:44:55 24 4
gpt4 key购买 nike

我知道 Android 的 View 结构完全不同(即 Activity 而不是 View Controller ),但我需要创建一个在 View 之间持续存在的导航栏。

只有一个 Activity 然后有很多 Fragment 真的是最好的方法吗?

如果是这样,这个实现是否已经在我可以使用的其他地方完成了?这似乎是经常会出现的事情,因为我看到许多 Android 应用程序都这样做。

最佳答案

我做了一个Framework (github)提供分层导航模式,通过动画提供导航感,而不是每次都启动新的 Activity。

Android Basic Framework Image

使用方法如下:

  • 将框架作为模块添加到您的项目中
  • 在您的项目中添加一个新的 Java 类(“文件 - 新建 - Java 类”)。注意:如果您正在编辑为您提供模板的 Activity.java 文件,请删除其所有实现并将其留空。
  • 让它扩展 NavigationActivity
  • 实现所有 NavigationActivity 抽象方法

(在 Android Studio 中,如果您单击 Alt + 插入并选择实现 - 方法,所有函数定义都会自动生成)。

public class NavigationTest extends NavigationActivity{
@Override
public Fragment firstFragment() {
//return the first fragment that will be shown

}

@Override
public Boolean showBackButtonInFirstFragment() {
//show back button already in the first Fragment
//set to True if this activity is called by another Activity
//the back button will then pop back to the previous Activity

}

@Override
public Boolean showMasterDetailLayoutInTablets() {
//set to false if you don't want a master-detail layout in tablets

}
}

展示一个新 fragment

您可以通过从 NavigationActivity 调用 pushFragment 方法来呈现一个新 fragment (带有漂亮的动画)。

public void pushFragment(Fragment newFragment, animationType animation, boolean showAsDetailFragmentIfPossible)

newFragment (Fragment): 将呈现的新 fragment

animation (animationType):动画类型枚举:RIGHT_TO_LEFT, BOTTOM_TO_TOP, FLIP

showAsDetailFragmentIfPossible (boolean):如果设置为 True,则用户在平板电脑中,并且您使用的是主从布局, fragment 将显示在详细 fragment (右侧面板)!

由于您可以使用 getActivity() 方法从任何 Fragment 访问 Activity,因此您可以从当前显示的 Fragment 中显示一个新 Fragment。例如,您可以将此代码放在按钮点击监听器中:

NextFragment f = new NextFragment();
NavigationActivity nav =((NavigationActivity)getActivity());
nav.pushFragment(f,NavigationActivity.animationType.RIGHT_TO_LEFT,false);

您不必担心实现后退按钮行为。这由 NavigationActivity 类自动处理。

关于android - 如何在 Android 中构建类似 UINavigationController 的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37978816/

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