首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从fragment调用NavController?

从fragment调用NavController可以通过以下步骤实现:

  1. 确保你的项目中已经使用了Android Jetpack库,并且在build.gradle文件中添加了相关依赖。
  2. 在fragment的布局文件中添加一个按钮或其他触发事件的控件。
  3. 在fragment的代码中,通过findViewById方法获取到该控件的实例,并为其设置一个点击事件监听器。
  4. 在点击事件监听器中,使用Navigation.findNavController方法获取到NavController的实例。
  5. 使用NavController的navigate方法进行页面导航,可以传入目标页面的ID或目标页面的动作。

下面是一个示例代码:

代码语言:txt
复制
public class MyFragment extends Fragment {
    private Button button;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_my, container, false);
        button = view.findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                NavController navController = Navigation.findNavController(v);
                navController.navigate(R.id.action_myFragment_to_otherFragment);
            }
        });
        return view;
    }
}

在上面的示例中,我们在fragment_my布局文件中添加了一个按钮,并在代码中为该按钮设置了一个点击事件监听器。在监听器中,我们通过调用Navigation.findNavController方法获取到NavController的实例,并使用navController.navigate方法进行页面导航,其中R.id.action_myFragment_to_otherFragment是目标页面的动作。

这样,当用户点击按钮时,就会触发页面导航,跳转到目标页面。

推荐的腾讯云相关产品:腾讯云移动应用分析(MTA),它是一款专业的移动应用数据分析产品,可以帮助开发者深入了解用户行为、应用性能等数据,提供数据分析、用户行为分析、漏斗分析等功能。了解更多信息,请访问腾讯云移动应用分析产品介绍页面:https://cloud.tencent.com/product/mta

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

1. Jetpack源码解析---看完你就知道Navigation是什么了?

我们一般手动切换Fragment时可以调用这个方法,最后就是跟踪到这里。...到这里,基本的几个核心类以及相关实现我们基本了解了,下面我们看一下基本的流程,首先我们入口进去,一点点跟进 3.3 Navigation.findNavController(this, R.id.fragment_home...总结 4.1 流程 考虑到我们开始如果直接setupWithNavController 入口进行分析的话,可能不太容易找到怎么创建的graph布局中的fragment,以及NavHostFragment...紧接着我们通过setGraph进入到了NavController类中,通过graph里面设置的初始fragment看到了切换栈内切换Fragment的代码。...到这里基本的代码实现已经了解的差不多了,然后我回到了入口,通过初始化NavController调用NavigationUI中的方法绑定NavigationView、ToolBar、BottomNavigationView

2.2K20

安卓Navigation系列——进阶篇

e) { return false; } } 还记得上篇介绍过的,怎么从一个页面跳转到另一个页面的吗,这里也一样,其实最终就是调用到了navController.navigate...的重绘,并且log日志中也可以看到,刚刚打开的FragmentDiscover也执行了onDestory同样也销毁了。...[k8q1t7a9gl.png] 下面源码角度分析为什么会这样。...对象,只不过它是继承自NavController的,戳进去构造方法,发现调用了父类的构造方法,再戳进去来到了NavController的构造方法, public NavController(@NonNull...至此我们具体分析了两个重要的步骤,一个是navigator的,一个是nav_graph.xml是如何被解析并关联到navController,弄清楚这两个步骤,对接下来的分析大有帮助。

3.1K30
  • Android-Jetpack笔记-Navigation之Fragment支持复用

    Jetpack笔记代码 本文源码基于SDK 29,IDE是Android studio 3.5.3 解决 给上篇文章的项目加些日志,面板页切到通知页,再从通知页切回面板页,查看日志, ?...可见面板页发生了销毁重建,接着创建一个FixFragmentNavigator继承FragmentNavigator并重写navigate方法,直接把父类的实现copy过来,第1步,在调用fragment...FixFragmentNavigator extends FragmentNavigator { } 至此FixFragmentNavigator就写好了,完整代码可以查看Jetpack笔记代码,接下来要如何把他使用进去呢...fragment = getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment); //获取导航控制器 NavController...navController = NavHostFragment.findNavController(fragment); //创建自定义的Fragment导航器 FixFragmentNavigator

    2K20

    1. Jetpack源码解析---看完你就知道Navigation是什么了?

    我们一般手动切换Fragment时可以调用这个方法,最后就是跟踪到这里。...到这里,基本的几个核心类以及相关实现我们基本了解了,下面我们看一下基本的流程,首先我们入口进去,一点点跟进 3.3 Navigation.findNavController(this, R.id.fragment_home...总结 4.1 流程 考虑到我们开始如果直接setupWithNavController 入口进行分析的话,可能不太容易找到怎么创建的graph布局中的fragment,以及NavHostFragment...紧接着我们通过setGraph进入到了NavController类中,通过graph里面设置的初始fragment看到了切换栈内切换Fragment的代码。...到这里基本的代码实现已经了解的差不多了,然后我回到了入口,通过初始化NavController调用NavigationUI中的方法绑定NavigationView、ToolBar、BottomNavigationView

    2.6K30

    深入浅出 NavigationUI | MAD Skills

    要启用它,需要在 onOptionsItemSelected() 函数中,为被选择的菜单项调用 onNavDestinationSelected() 函数,并传入 navController。...接下来,在 MainActivity 类中,获得 navController 和 toolbar 的实例,并且验证 setSupportActionBar() 是否被调用。...根据目前的目的页面,我覆写了 onSupportNavigationUp() 函数,然后在 nav_host_fragment调用 navigateUp() 并传入 appBarConfiguration...△ 标题更新了并且也显示了返回按钮 底部标签栏 目前为止还算顺利,但是应用还不能导航到 coffeeList Fragment。接下来我们将解决这个问题。 我们添加底部标签栏入手。...setupWithNavController(navController) } 请注意我并没有导航图中调用任何导航操作。实际上导航图中甚至没有前往 coffeeList Fragment 的路径。

    3K30

    【Jetpack】Navigation 导航组件 ② ( Navigation 核心要点说明 | 创建 Navigation Graph | 创建 NavHostFragment | 完整代码示例 )

    Navigation Graph 的创建 , 之后会通过 NavController 调用上面的两个跳转 , 分别实现两个 Fragment 之间的跳转 ; 5、创建 NavHostFragment...在 Activity 中通过 调用 findNavController 函数 , 获取 NavController , 然后通过该 NavController 变量进行导航 ; fragmentContainerView...// 对应的就是 navController 实例变量 val navController = findNavController(this, R.id.fragment)...通过点击按钮 , 跳转到另外一个 Fragment 界面 ; 首先 , 获取 NavigationController , 通过调用 Navigation.findNavController 函数 ,...并进行导航 在 Activity 中通过 调用 findNavController 函数 , 获取 NavController , 然后通过该 NavController 变量进行导航 ; fragmentContainerView

    56820

    Jetpack:新一代导航管理Navigation

    和Activity 添加完页面后,我们还需要添加页面之间的导航,可以手动添加action标签,当然也可以通过拖拽来实现,如下: 这样我们就添加了一个FirstFragment导航到SecondFragment...注意首先通过findNavController()来获取一个NavController对象,然后调用它的navigate函数即可,当然这个函数有多种重载,比如可以传递参数,如下: public void...可以看到onViewCreated中调用了Navigation的setViewNavController函数,它的代码如下: public static void setViewNavController...注意在onViewCreated中不仅为Fragment的View添加了tag,同时还为其父View也添加了,这样做的目的是在Activity中也可以获取到NavController,这点下面就会遇到。...注意这里的findNavController是Activity的扩展函数,它最终一样会调用Navigation的对应函数,所以与Fragment的流程是一样的。

    89820

    1. Android_Jetpack组件---Naviagtion源码解析

    我们一般手动切换Fragment时可以调用这个方法,最后就是跟踪到这里。...到这里,基本的几个核心类以及相关实现我们基本了解了,下面我们看一下基本的流程,首先我们入口进去,一点点跟进 3.3 Navigation.findNavController(this, R.id.fragment_home...总结 4.1 流程 考虑到我们开始如果直接setupWithNavController 入口进行分析的话,可能不太容易找到怎么创建的graph布局中的fragment,以及NavHostFragment...紧接着我们通过setGraph进入到了NavController类中,通过graph里面设置的初始fragment看到了切换栈内切换Fragment的代码。...到这里基本的代码实现已经了解的差不多了,然后我回到了入口,通过初始化NavController调用NavigationUI中的方法绑定NavigationView、ToolBar、BottomNavigationView

    2.1K10

    Android 多返回栈技术详解

    当您调用 popBackStack() 方法时 (无论是直接调用,还是通过系统返回键以 FragmentManager 内部机制调用),Fragment 返回栈的最上层事务会栈中弹出 -- 比如新添加的...事务的修改 —— 当您堆栈弹出一个非常不确定的元素时,这些事务从下层替换出来的时候会撤销之前未添加到返回栈的修改。...我们不能调用得太早 (您的 Fragment 不应该在 STARTED 状态下保存状态),也不能调用得太晚 (您需要在 Fragment 被销毁之前保存状态)。...然而,NavHost 接口 的实现中需要考虑这些内容,通过它添加一个或者多个 Navigator 实例时,这些实例 确实 清楚如何与特定类型的目的地进行交互。...这是属于 NavController 的职责。

    94310

    【Android进阶必学】JetPack指路明灯—Navigation

    ,开发者可以将重点放在业务开发上,避免处理太多了Fragment管理代码和调用代码,从而加速业务开发效率。...:一系列Fragment的容器,用于承载Fragment NavController:用于处理Fragment路由跳转 下面通过一个简单的例子,来演示下,如何使用Navigation。...为什么能获取 这里有个地方很有意思,那就是为什么通过view可以获取NavController。 Navigation.findNavController(View) 源码中可以发现。...image.png 这样的API设计,可以让用户传入View后进行遍历,通过查找指定Tag来获取NavController,简化了调用方式。...下面通过一个例子来演示下,如何对路由进行返回控制,下面有三个Fragment,A-B-C。

    2K00

    Jetpack组件之Navigation

    这是一个特殊的 Fragment,Navigation Graph 中的 Fragment 正是通过 NavHostFragment进行展示的。 NavController。...的onCreateOptionsMenu()添加菜单,则可以通过覆盖Activity的onOptionsItemSelected()以调用onNavDestinationSelected(),从而将菜单项与目标页相关联...(navView, navController); 导航事件监听 NavController提供了一个名为OnDestinationChangedListener的接口,对页面切换事件进行监听,该接口在页面发生切换或参数改变时调用...当用户深层链接页面按下返回按钮时,他们会返回到相应的导航堆栈。 我们使用NavDeepLinkBuilder类构造PendingIntent。...Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment); navController

    3K20

    JetPack--Navigation

    进行展示的 3.NavController:用于在代码中完成Navigation Graph中具体的页面切换工作 当想要切换Fragment时,使用NavController对象,指定跳转Navigation...NavController绑定 NavigationUI.setupActionBarWithNavController(this, navController); } } 在fragment...ic_launcher_background" android:title="设置" /> Activity中,先重写onCreateOptionsMenu方法,使用我们定义的menu,然后在onCreate中调用...} } 仔细看我们的效果,跳转到设置后,AppBar右上角的选项还在,那么我们需要在设置界面时,去除选项 在SettingFragment中,重写onCreateOptionsMenu方法,调用...menu.clear(),并在onCreateView方法中调用setHasOptionsMenu(true)来确保onCreateOptionsMenu的执行 @Override public

    58810

    【Jetpack】Navigation 导航组件 ① ( Navigation 引入 | Navigation 特点 | Navigation 重要组件 | Navigation 使用流程 )

    ; 通过 NavController 可以轻松地跳转到不同的目的地 , 并处理回退操作 ; 切换 Fragment 显示流程 : 使用 NavController 组件 切换 Fragment , 设置...要跳转的 定义在 Navigation Graph 中定义的 Fragment ; NavController 组件 会将 指定的 Fragment 显示到 NavHostFragment 组件中 ;...圆圈 , 在 圆圈 上 , 按住鼠标左键 , 拖动到 fragmentB 上 , 会自动生成一个箭头 , 这个箭头就是 action , 代表了一次跳转 ; 也可以设置一个 fragmentB...通过 调用 findNavController 函数 , 获取 NavController , 然后通过该 NavController 变量进行导航 ; // fragmentContainerView...组件的 管理 操作通过 NavController 完成 // 对应的就是 navController 实例变量 val navController = findNavController

    62740

    安卓Navigation系列——入门篇

    组成三要素 Navigation graph 一个包含所有导航相关信息的 XML 资源 NavHostFragment 一种特殊的Fragment,用于承载导航内容的容器 NavController 管理应用导航的对象...通过NavController 管理fragment之间的跳转 上面说到三个fragment之间的跳转关系是FragmentA -> FragmentB -> FragmentC,并且已经可以展示了FragmentA...,那怎么跳转到FragmentB呢,这就需要用到NavController 了 打开FragmentA类,给布局中的TextView定义一个点击事件 override fun onViewCreated...管理fragment的跳转非常简单,首先得到navController对象,然后调用它的navigate方法,传入前面nav_graph中定义的action的id即可。...android.intent.action.VIEW -d "http://www.deeplink.com/1" 总结 本篇是navigation的入门篇,主要介绍了navigation的基本使用,下篇将从源码角度,剖析navigation是如何做到页面之间跳转的

    2.1K51

    compose--附带效应、传统项目集成、导航

    该文章将是compose基础系列中最后一篇,附带效应是这篇文章的重点,其余补充内容为如何在传统xml中集成compose、compose导航的使用 一、附带效应 有了前面的了解,我们知道compose...remember并不会更新引用,指定key时,当key发生变化,则会更新引用 LaunchedEffect运行时会复制引用,新建变量指向传入的引用,所以此时无论外部变量的引用发生如何改变,并不会改变LaunchedEffect...中使用 fragment中要多一步绑定View树生命周期: class BlankFragment : Fragment() { override fun onCreateView(...") 在导航到“friendslist”之前,将所有内容后堆栈中弹出到“home”(不包含home) navController.navigate("friendslist") { popUpTo...("home") } 在导航到“friendslist”之前,堆栈中弹出所有内容,包括“home” navController.navigate("friendslist") { popUpTo

    2.2K40
    领券