需求 给定一个链接地址 要求跳转到Detailfragment页面当中并携带参数。

实际上。这个在原生是比较不好处理的。

but Navigation 官方解决方案比较简单

detailFragment当中配置下面这句话

        <deepLink app:uri="www.baidu.com/{params}" />

承载detailFragment的页面配置上面

      <activity android:name=".activity.NavigationActivity"
            android:exported="true">
            <nav-graph android:value="@navigation/my_nav_graph" />
        </activity>

针对代码获取参数

package com.anguomob.jecpack.fragment

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.navigation.Navigation
import com.anguomob.jecpack.R
import com.anguomob.jecpack.databinding.FragmentDetailNavigationBinding
import com.anguomob.jecpack.databinding.FragmentHomeNavigationBinding

// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private const val ARG_PARAM1 = "param1"
private const val ARG_PARAM2 = "param2"

/**
 * A simple [Fragment] subclass.
 * Use the [DetailNavigationFragment.newInstance] factory method to
 * create an instance of this fragment.
 */
class DetailNavigationFragment : Fragment() {
    private lateinit var binding: FragmentDetailNavigationBinding
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        binding = FragmentDetailNavigationBinding.inflate(inflater)
//        inflater.inflate(R.layout.fragment_home_navigation, container, false)
        return binding.root
    }

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        arguments?.let {
            val args = HomeNavigationFragmentArgs.fromBundle(it);
            val username = args.username
            val age = args.age

            val params = it.getString("params")
            binding.tvUserName.text =
                "username:" + username + "age:" + age + "params:" + params.toString()

        }

        binding.btDetail.setOnClickListener {

            val findNavController = Navigation.findNavController(it)
            findNavController.navigate(R.id.action_detailNavigationFragment_to_homeNavigationFragment)
        }
    }
}

重点关注

   val params = it.getString("params")

就可以拿到params

如何调试呢。笨方法 写一个意图。进行跳转

聪明方法。adb shell命令

adb shell am start -a android.intent.action.VIEW -d "http://www.baidu.com/fromWeb"

即可调用起来针对浏览这个网址的意图

到时候如果安装了我们apk可以选择是用我们程序打开或者浏览器。

如果没有安装我们app则可以直接使用浏览器方法固定的网站。一般这种场景使用的还是挺多的

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐