目录
介绍
和第三方框架比较
如何使用?
添加依赖
新建fragment
Navigation导航是指允许用户在应用内的不同内容中导航,导入和退出的交互。利用它我们能够更好的实现Fragment的管理,轻松实现单个Activity和多个Fragment的交互模式,这种交互模式其实也是一个APP最“科学”的形式。
类似的导航库其实在开源第三方项目中早已存在,例如优秀的Fragmentation和FragmentRigger,它们都趋向成熟且有一定规模。那么Navigation和它们相比又有什么优势?
首先,Navigation职责单一,目前来看仅对Fragment做导航管理(导航该页或回退该页)。 二是,Navigation的兼容性更好,能保障向上兼容性。 三是,Navigation的后续扩展性,从代码设计上可以看出,Navigation并非只为Fragment提供导航。
dependencies {
...
def navigation_version = '2.1.0-beta02'
implementation "androidx.navigation:navigation-runtime-ktx:$navigation_version"
implementation "androidx.navigation:navigation-fragment-ktx:$navigation_version"
implementation "androidx.navigation:navigation-ui-ktx:$navigation_version"
}
class ContactList : Fragment(){
private lateinit var datas : MutableList
class ContactMessage : Fragment(){
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_contact_msg, container, false)
val phone = arguments?.getString("phone") ?: "null"
val name = arguments?.getString("name") ?: "null"
view.findViewById(R.id.tv_about).text = name
view.findViewById
res目录下新建navigation目录,并创建导航结构图nav_graph.xml
其中,action是导航行为,可以被NavController所指定调用。argument是携带参数,可以单独配置。
//...
设置app:defaultNavHost=”true”和导航目录加载于指定fragment之上
携带Bundle的导航行为
val builder = Bundle()
builder.putString("phone",mapData["phone"])
builder.putString("name", mapData["name"])
Navigation.findNavController(view).navigate(R.id.action_contactList_to_contactMessage,builder)
导航回退行为
Navigation.findNavController(view).popBackStack()