Kotlin-Android开发之BottomBar快速构建项目

前言:作为安卓开发的老手,最近用Kotlin开发还是有点不习惯,但是。。。好了,回归正题,这次带领大家使用bottombar+fragment快速构建一个项目的开始阶段。这次主要不是介绍bottomBar的使用,而是项目开发前奏的注意事项,比如fragment基类和activity基类的抽取,fragment工具类的建立等等,适合刚入手的小白使用,此次开发使用Kotlin语言。


效果预览图:

Kotlin-Android开发之BottomBar快速构建项目_第1张图片Kotlin-Android开发之BottomBar快速构建项目_第2张图片

代码目录:

Kotlin-Android开发之BottomBar快速构建项目_第3张图片


需要添加的依赖:

    //anko
    implementation "org.jetbrains.anko:anko:0.10.1"
    //bottom-bar
    implementation 'com.roughike:bottom-bar:2.3.1'

1、首先fragment基类的抽取,代码如下

BaseFragment.kt
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import org.jetbrains.anko.AnkoLogger
import org.jetbrains.anko.runOnUiThread
import org.jetbrains.anko.toast

/**
 * 所有fragment的基类
 */
abstract class BaseFragment: Fragment(),AnkoLogger{

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        init()
    }

    /**
     * fragment初始化
     */
    open protected fun init() {

    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return initView()
    }

    /**
     * 获取布局id
     */
    abstract fun initView(): View?

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        initListener()
        initData()
    }

    /**
     * 初始化数据
     */
    open protected fun initData() {

    }

    /**
     * adapter
     * listener
     */
    open protected fun initListener(){

    }

    open fun myToast(msg:String){
        context?.runOnUiThread { toast(msg) }
    }
}

2.Activity基类的抽取

BaseActivity.kt
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import org.jetbrains.anko.AnkoLogger
import org.jetbrains.anko.startActivity
import org.jetbrains.anko.toast

/**
 * 所有activity类的基类
 */
abstract class BaseActivity : AppCompatActivity(),AnkoLogger {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(getLayoutId())
        initListener()
        initData()
    }

    /*
     * 初始化数据
     */
    open protected fun initData() {
    }

    /**
     * adapter listener
     */
    open protected fun initListener() {
    }

    /**
     * 获取布局id
     */
    abstract fun getLayoutId(): Int

    open protected fun myToast(msg:String){
        runOnUiThread { toast(msg) }
    }

    inline fun  startActivityAndFinish(){
        startActivity()
        finish()
    }
}

3.fragment工具类

import com.fly.bottombardemo.R
import com.fly.flyplayer.base.BaseFragment
import com.fly.flyplayer.ui.fragment.*

class FragmentUtil private constructor(){//私有化构造方法
    val firstFragment by lazy { FirstFragment() }
    val secondFragment by lazy { SecondFragment() }
    val thirdFragment by lazy { ThirdFragment() }
    companion object {
        val fragmentUtil by lazy { FragmentUtil() }
    }

    /**
     * 根据tabid获取对应的fragment
     */
    fun getFragment(tabId:Int):BaseFragment?{
        when(tabId){
            R.id.tab_first -> return firstFragment
            R.id.tab_second -> return secondFragment
            R.id.tab_third -> return thirdFragment
        }
        return null
    }
}

4.新建三个Fragmen类继承自BaseFragment类,以第一个为例

FirstFragment.kt
import android.view.View
import com.fly.bottombardemo.R
import com.fly.flyplayer.base.BaseFragment

class FirstFragment:BaseFragment() {
    override fun initView(): View? {
        return View.inflate(context, R.layout.fragment_first, null)
    }
}

布局代码为:




    

5.在Activity中使用BottomBar

MainActivity.kt

import com.fly.bottombardemo.R
import com.fly.flyplayer.base.BaseActivity
import com.fly.flyplayer.util.FragmentUtil
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : BaseActivity() {
    override fun getLayoutId(): Int {
        return R.layout.activity_main
    }

    override fun initListener() {
        //设置tab切换监听
        bottomBar.setOnTabSelectListener{
            // it 代表参数tabId
            val transaction = supportFragmentManager.beginTransaction()
            transaction.replace(R.id.container, FragmentUtil.fragmentUtil.getFragment(it)!!,it.toString())
            transaction.commit()
        }
    }
}

布局文件




    

    

然后再res目录下新建一个xml文件夹,然后在xml文件夹新建一个bottombar_tabs.xml文件



    
    
    

ok,完成!

你可能感兴趣的:(安卓系列)