用kotlin怎么写Android切换界面

1.新建一个文件夹,命名为navigation,再在该文件夹下创建一个.xml文件

2.layout目录下的activity_main代码及效果图,写个主页面,在里面写一个便于跳转的框

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.fos.arfilemanager.activity.main.MainActivity">
    <fragment
        android:id="@+id/nav_host_container"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        app:layout_constraintBottom_toBottomOf="parent"
        android:layout_height="0dp"
        app:defaultNavHost="true"
        app:layout_constraintTop_toTopOf="@id/gl_h_09"
        app:navGraph="@navigation/nav_home"
        tools:layout="@layout/fragment_recently" />
    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/gl_h_09"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.09" />

    <com.google.android.material.tabs.TabLayout
        android:id="@+id/tl"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:background="@color/black"
        app:layout_constraintBottom_toBottomOf="@+id/gl_h_09"
        app:layout_constraintTop_toTopOf="parent"
        app:tabIndicatorColor="@color/color_ff3877e0"
        app:tabIndicatorFullWidth="true"
        app:tabTextColor="@color/white">

        <com.google.android.material.tabs.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/home_1" />

        <com.google.android.material.tabs.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/home_2"
            />
    </com.google.android.material.tabs.TabLayout>


</androidx.constraintlayout.widget.ConstraintLayout>

3.在Fragment类里画出需要跳转的两个页面

 ①recently类是写初始的页面类

package com.fos.arfilemanager.fragment

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.fos.arfilemanager.databinding.FragmentRecentlyBinding

class RecentlyFragment :AbstractFileManagerFragment<FragmentRecentlyBinding>(){
    override fun bindObserver() {
        
    }

    override fun unbindObserver() {
        
    }

    override fun createViewBinding(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): FragmentRecentlyBinding {
        return FragmentRecentlyBinding.inflate(inflater,container,false)
    }

    override fun initView(view: View, savedInstanceState: Bundle?) {
        
    }

    override fun onRenderView() {
        
    }

    override fun onRestoreState(savedInstanceState: Bundle) {
        
    }

    override fun onSaveState(outState: Bundle) {
        
    }
}

②classfiy类是后面需要跳转的页面

package com.fos.arfilemanager.fragment

import android.graphics.BitmapFactory
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.GridLayoutManager
import com.fos.arfilemanager.R
import com.fos.arfilemanager.adapter.ClassifyAdapter
import com.fos.arfilemanager.bean.ClassifyBean
import com.fos.arfilemanager.databinding.FragmentClassifyBinding

class ClassifyFragment :AbstractFileManagerFragment<FragmentClassifyBinding>(){
    private val classAdapter = ClassifyAdapter()
    override fun bindObserver() {
        
    }

    override fun unbindObserver() {
        
    }

    override fun createViewBinding(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): FragmentClassifyBinding {
        return FragmentClassifyBinding.inflate(inflater,container,false)
    }

    override fun initView(view: View, savedInstanceState: Bundle?) {
        val list:MutableList<ClassifyBean> = mutableListOf()
            list.add(ClassifyBean(R.mipmap.ic_picture,getString(R.string.classify_1)))
            list.add(ClassifyBean(R.mipmap.ic_video,getString(R.string.classify_2)))
            list.add(ClassifyBean(R.mipmap.ic_document,getString(R.string.classify_3)))
            list.add(ClassifyBean(R.mipmap.ic_voice,getString(R.string.classify_4)))
            list.add(ClassifyBean(R.mipmap.ic_application,getString(R.string.classify_5)))
            list.add(ClassifyBean(R.mipmap.ic_apk,getString(R.string.classify_6)))
//            list.add(ClassifyBean(getString(R.string.classify_2),"${R.mipmap.ic_video}"))
//            list.add(ClassifyBean(getString(R.string.classify_3),"${R.mipmap.ic_document}"))
//            list.add(ClassifyBean(getString(R.string.classify_4),"${R.mipmap.ic_video}"))
//            list.add(ClassifyBean(getString(R.string.classify_5),"${R.mipmap.ic_application}"))
//            list.add(ClassifyBean(getString(R.string.classify_6),"${R.mipmap.ic_apk}"))
        classAdapter.list = list
        bind.rvClassify.adapter = classAdapter
        bind.rvClassify.layoutManager = GridLayoutManager(requireContext(),3)
//        bind.vv.setImageBitmap(BitmapFactory.decodeFile("storage/emulated/0/DCIM/Camera/IMG_20220702_003011_0.jpg"))
    }

    override fun onRenderView() {
        
    }

    override fun onRestoreState(savedInstanceState: Bundle) {
        
    }

    override fun onSaveState(outState: Bundle) {
        
    }

}

4.navigation文件夹下nav_home.xml文件内容及效果图,把两个切换的页面写好

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/nav_home"
    app:startDestination="@id/recentlyFragment">  //绑定Fragment


    <fragment
        android:id="@+id/recentlyFragment"
        android:name="com.fos.arfilemanager.fragment.RecentlyFragment"
        android:label="RecentlyFragment"
        tools:layout="@layout/fragment_recently" />
    <fragment
        android:id="@+id/classifyFragment"
        android:name="com.fos.arfilemanager.fragment.ClassifyFragment"
        android:label="ClassifyFragment"
        tools:layout="@layout/fragment_classify" />

</navigation> 

 

5.在activity.main文件夹下的MainActivity写好页面逻辑,RecyclerView自带页面页数监听器

 

package com.fos.arfilemanager.activity.main

import android.annotation.SuppressLint
import android.os.Bundle
import android.view.KeyEvent
import android.view.MotionEvent
import android.view.View
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.NavController
import androidx.navigation.findNavController
import androidx.navigation.fragment.findNavController
import com.fos.arfilemanager.R
import com.fos.arfilemanager.databinding.ActivityMainBinding
import com.google.android.material.tabs.TabLayout


class MainActivity : AppCompatActivity() {
    private lateinit var bind: ActivityMainBinding
    lateinit var navController:NavController
    companion object {
        private const val TAG = "MainActivity"
    }

    @SuppressLint("NewApi")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        bind = ActivityMainBinding.inflate(layoutInflater)
      setContentView(bind.root)
        bind.tl.addOnTabSelectedListener(object :TabLayout.OnTabSelectedListener{
            override fun onTabSelected(tab: TabLayout.Tab?) {
                when(tab?.position){
                    0 ->{ findNavController(R.id.nav_host_container).navigate(R.id.recentlyFragment) }
                    1 ->{findNavController(R.id.nav_host_container).navigate(R.id.classifyFragment) }
                }
            }

            override fun onTabUnselected(tab: TabLayout.Tab?) {
            }

            override fun onTabReselected(tab: TabLayout.Tab?) {
            }

        })
    }

    interface OnKeyListener {
        fun dispatchKeyEvent(event: KeyEvent?): Boolean
    }

}

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值