很简单,直接上代码
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) button.setOnClickListener { replaceFragment(AnotherRightFragment()) } replaceFragment(RightFragment()) } //替换Fragment的函数 fun replaceFragment(fragment: Fragment){ //先获取fragmentManager,在Activity中使用supportFragmentManager val fragmentManager = supportFragmentManager //开启一个事务 val transaction = fragmentManager.beginTransaction() //使用replace()替换Fragment;参数一:Fragment父节点,参数二:要替换为的Fragment transaction.replace(R.id.rightLayout,fragment) //提交事务 transaction.commit() } }此时,按下返回键会直接退出应用程序,那么如何将fragment添加入返回栈呢? 只需要一行代码
//添加至返回栈 transaction.addToBackStack(null)由于findFragmentById()方法返回的是Fragment实例,所以这里如果我们想使用LeftFragment里的方法,就必须使用 as LeftFragment 进行类型转换
由于fragment同样支持plugin: 'kotlin-android-extensions'所以我们也可以在kotlin的代码中直接获取:
val fragment2:LeftFragment = leftFrag as LeftFragment可以在fragment里使用getActivity()方法获取 它所在的 activity 如果该fragment没有被放进activity中,则使用getActivity()会返回null,所以要进行判空处理
if (activity != null){ val mainActivity = activity as MainActivity }先获取Activity,再使用Activity获取Fragment
偷个懒,参见:Fragment生命周期
先在res目录下创建layout-large文件夹,再在文件夹下创建与要适配的activity界面同名称的文件,如这里是:activity_main.xml
注意:若layout-large文件夹上右键-NEW-XML-Layout XML File提示无法创建重复的布局文件方法:在该文件夹上右键默认还是在layout文件夹内创建布局文件,与原来的activity_main冲突。 应该在该文件夹右键-NEW-Layout Resource File创建新的xml。
则在大屏幕设备上会自动加载layout-large文件夹中的activity_main。