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 } }
本文介绍了如何在Android应用中创建一个新的文件夹并设置XML布局文件,展示了一个包含Fragment的主页面设计,使用了ConstraintLayout、TabLayout和NavController进行页面导航。同时,展示了两个Fragment的实现,RecentFragment作为初始页面,ClassifyFragment作为可跳转的页面,包含一个RecyclerView用于显示分类内容。最后,详细说明了在MainActivity中如何设置页面逻辑,通过TabLayout监听切换,并使用NavController进行页面跳转。
1054

被折叠的 条评论
为什么被折叠?



