1.其实网上有许多种,关于kotlin的写法,我这里简单贴一下代码和思路
效果图:
2.主界面
package com.example.admin.zkotlin
import android.annotation.TargetApi
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.PixelFormat
import android.hardware.Camera
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.Environment
import android.os.Handler
import android.util.Log
import android.view.Surface
import android.view.SurfaceHolder
import android.view.SurfaceView
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
import kotlinx.android.synthetic.main.activity_main.*
import java.io.File
import java.io.FileOutputStream
class MainActivity : AppCompatActivity() {
// 创建不可变List listof
private var fragments:List<Fragment> = listOf(HomePageFragment(),InterviewPageFragment(),QuestionAndAnswerFragment(),MineFragment())
private var currentFragment:Fragment ?=null
// 数组容器 创建数组
private val icons = arrayOf(arrayOf(R.mipmap.home_page_selected,R.mipmap.interview_guide_selected,
R.mipmap.ask_every_day_selected,R.mipmap.my_page_selected),
arrayOf(R.mipmap.home_page_unselected,R.mipmap.interview_guide_unselected,
R.mipmap.ask_every_day_unselected,R.mipmap.my_page_unselected))
//lateinit(延迟加载)
private lateinit var buttons:Array<TextView>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
initData()
initEvent()
}
private fun initData(){
buttons = arrayOf(home_page,interview_guide,ask_every_day,my_page)
switchFragment(fragments[0])
}
private fun initEvent(){
buttons.forEach { it->
it.setOnClickListener {
switchFragment(fragments[buttons.indexOf(it)])
}
}
}
private fun switchFragment(fragment: Fragment){
if (currentFragment == fragment){
return
}
supportFragmentManager.fragments.forEach{
if (it.isAdded && !it.isHidden){
supportFragmentManager.beginTransaction().hide(it).commit()
}
}
if (!fragment.isAdded){
supportFragmentManager.beginTransaction().add(R.id.fragment_layout,fragment).commit()
}else{
supportFragmentManager.beginTransaction().show(fragment).commit()
}
currentFragment = fragment
if (currentFragment !=null){
val indexof = fragments.indexOf(currentFragment!!)
(buttons.indices).forEach {
val drawable = if(it == indexof) getDrawable(icons[0][it]) else getDrawable(icons[1][it])
buttons[it].setCompoundDrawablesWithIntrinsicBounds(null,drawable,null,null)
}
}
}
inner class Adapter(fm:FragmentManager): FragmentPagerAdapter(fm){
override fun getItem(position: Int): Fragment {
return fragments[position]
}
override fun getCount(): Int {
return fragments.count() //返回此集合中的元素数
}
}
// 修饰为伴生对象,伴生对象在类中只能存在一个,类似于java中的静态方法 Java 中使用类访问静态成员,静态方法。
companion object{
fun newIntent(context:Context): Intent {
return Intent(context,MainActivity::class.java)
}
}
}
3.BaseFragment
package com.example.admin.zkotlin
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
/**
Created by wrs on 10/12/2019,下午 3:01
projectName: ZKotlin
packageName: com.example.admin.zkotlin
*/
open abstract class BaseFragment : Fragment(){
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(getLayoutRes(),container,false)
}
abstract fun getLayoutRes():Int
}
4.具体的fragment
package com.example.admin.zkotlin;
import androidx.fragment.app.Fragment;
/**
* Created by wrs on 10/12/2019,上午 11:47
* projectName: ZKotlin
* packageName: com.example.admin.zkotlin
*/
public class HomePageFragment extends BaseFragment {
@Override
public int getLayoutRes() {
return R.layout.fragment_home;
}
}
5.主界面布局
<?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=".MainActivity">
<FrameLayout
android:id="@+id/fragment_layout"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/bottom_container"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:id="@+id/bottom_container"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@color/white"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<TextView
android:id="@+id/home_page"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:drawableTop="@mipmap/home_page_selected"
android:gravity="center"
android:padding="8dp"
android:text="首页"
android:textSize="10sp"
tools:ignore="SmallSp" />
<TextView
android:id="@+id/interview_guide"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:drawableTop="@mipmap/interview_guide_unselected"
android:gravity="center"
android:padding="8dp"
android:text="面试指南"
android:textSize="10sp"
tools:ignore="SmallSp" />
<TextView
android:id="@+id/ask_every_day"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:drawableTop="@mipmap/ask_every_day_unselected"
android:gravity="center"
android:padding="8dp"
android:text="每日一问"
android:textSize="10sp"
tools:ignore="SmallSp" />
<TextView
android:id="@+id/my_page"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:drawableTop="@mipmap/my_page_unselected"
android:gravity="center"
android:padding="8dp"
android:text="我的"
android:textSize="10sp"
tools:ignore="SmallSp" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
end,差不多就这些,其他的几个fragment,都是重复一样的内容,另外缺的图片资源和布局资源,请自行添加补上