Android中Navigation的使用

本文详细介绍了Android中使用Navigation组件进行页面导航的方法,包括如何配置页面跳转、在Activity中获取当前Fragment对象以及如何在Fragment中处理onActivityResult回调。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、页面导航:A–>B–>C

页面从A到B,有B到C,然后由C返回A时的写法

页面B在xml中的配置
<fragment
        android:id="@+id/B"
        android:name="xxx.VerificationPhoneFragment"
        android:label="@string/VerificationPhoneFragment"
        tools:layout="@layout/fragment_verification_phone">
        <action
            android:id="@+id/action_B_to_C"
            app:destination="@id/C"
            app:popUpTo="@id/B"
            app:popUpToInclusive="true"
            />
    </fragment>

二、在Activity中获取当前的Fragment对象

  1. java中
public Fragment getFragment(Class<?> clazz) {
    List<Fragment> fragments = getSupportFragmentManager().getFragments();
    if (fragments!= null && fragments.size() > 0) {
       NavHostFragment navHostFragment = (NavHostFragment) fragments.get(0);
       List<Fragment> childfragments = navHostFragment.getChildFragmentManager().getFragments();
       if(childfragments != null && childfragments.size() > 0){
           for (int j = 0; j < childfragments.size(); j++) {
               Fragment fragment = childfragments.get(j);
               if(fragment.getClass().isAssignableFrom(clazz)){
                   Log.i(TAG, "getFragment1: " + fragment);
                   return fragment;
               }
           }
       }
    }
    return null;
}
  1. kotlin中
   private fun <F : Fragment> getFragment(fragmentClass: Class<F>): F? {
        val navHostFragment = this.supportFragmentManager.fragments.first() as NavHostFragment
        navHostFragment.childFragmentManager.fragments.forEach {
            if (fragmentClass.isAssignableFrom(it.javaClass)) {
                return it as F
            }
        }
        return null
    }

三、Fragment中onActivityResult的调用

在这个Fragment所以的Activity的onActivityResult中获取当前的Fragment对象,再调用这个对象的onActivityResult方法。

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        val myPersonInfoFragment:MyPersonInfoFragment= getFragment(MyPersonInfoFragment::class.java)!!
        myPersonInfoFragment.onActivityResult(requestCode, resultCode, data)
    }

如果有多个Fragment都需要调用onActivityResult的方法,则可以在循环中调用。

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        val navHostFragment = this.supportFragmentManager.fragments.first() as NavHostFragment
        val listFragments = navHostFragment.childFragmentManager.fragments
        for(item:Fragment in listFragments){
            if(item is MyPersonInfoFragment){
                item.onActivityResult(requestCode, resultCode, data)
            }else if(item is FeedBackFragment){
                item.onActivityResult(requestCode, resultCode, data)
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值