先用一下Kotlin的优点,直接使用id访问界面控件
gradle中添加这句话
apply plugin: 'kotlin-android-extensions'
在文件中导入库
import kotlinx.android.synthetic.main.fragment_detail.*
创建Fargment
创建Navigation
选中res文件夹
添加fragment到navigation
添加navigation到activity
NavController的获取
- 在activity中
Navigation.findNavController(this,R.id.fragment)
- 在fragment中
Navigation.findNavController(it)
fragment中设置导航
Navigation.findNavController(it).navigate(R.id.action_detailFragment_to_homeFragment)//id中是要转入的路径
设置标签
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//使用以下两个命令
var Navi:NavController=Navigation.findNavController(this,R.id.fragment4)
NavigationUI.setupActionBarWithNavController(this,Navi)
}
//使返回键生效
override fun onSupportNavigateUp(): Boolean {
return Navigation.findNavController(this,R.id.fragment4).navigateUp();//id是自己activity的navihost容器的id
}
}
效果
fragment直接传送数据
发送方
var agur:Bundle=Bundle()//创建一个bundle
agur.putString("text",editTextTextPersonName2.text.toString())//将数据传进去
Navigation.findNavController(it).navigate(R.id.action_homeFragment_to_detailFragment,agur)//页面改变时候作为参数传入
接收方
arguments?.getString("text")//直接接收数据