kotlin baseactivity和basefragment的写法,抽象类抽象方法的运用,带toolbar的baseactivity的写法

1、baseactivity和basefragment的写法

额外的知识点:
注意:抽象方法必须要在抽象类中
为什么要使用抽象类和抽象方法?
原因:当我们定义一个baseactivity的时候,布局文件layout和view控件等都是不确定的,我们需要在继承baseactivity的时候才会进行设置,所以这就要使用抽象类和抽象方法

baseactivity需要的功能

Toast,加载框,权限申请,跳转和带参数跳转,沉浸式状态栏(背景,文字):建议放到context的扩展函数中

因为扩展函数的出现,这些功能我们都可以放到扩展函数里,所以baseactivity我们只添加一个toolbar,想看上面功能的实现代码,可以到我的另外一篇博客

2、带toolbar的baseactivity的写法

当然,toolbar可以在需要的时候自己添加想要的,这里只是提供封装,在项目中还是可以用到的;下面我们来看看怎么实现
在这里插入图片描述
首先是BaseToolbarActivity的代码

package com.example.baseactivity

import android.os.Bundle
import android.view.LayoutInflater
import android.view.Menu
import android.view.MenuItem
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_base.*


abstract class BaseToolbarActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 初始化基础布局
        setContentView(R.layout.activity_base)
        // 初始化设置Toolbar
        setSupportActionBar(toolbar_base)
        // 将继承了BaseActivity的布局文件解析到 container 中,这样 BaseActivity 就能显示 MainActivity 的布局文件了
        LayoutInflater.from(this).inflate(setlayout(), frameLayout_base)

    }

    /**
     * 设置toolbar的标题
     */
    fun setToolbarTitle(title: String) {
        toolbar_base.title = title
    }

    /**
     * 初始化布局
     */
    protected abstract fun setlayout(): Int

    // 右上角的菜单
    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        menuInflater.inflate(R.menu.menu_main, menu)
        return true
    }

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        // 有上角菜单点击事件
        return when (item.itemId) {
            R.id.action_settings -> true
            else -> super.onOptionsItemSelected(item)
        }
    }



}

base_activity.xml的代码

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout 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=".BaseToolbarActivity">

    <com.google.android.material.appbar.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar_base"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:background="?attr/colorPrimary"
            app:navigationIcon="@mipmap/toolbar_back"
            app:title="Toolbar"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

    </com.google.android.material.appbar.AppBarLayout>

    <FrameLayout
        android:id="@+id/frameLayout_base"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>



</androidx.coordinatorlayout.widget.CoordinatorLayout>

在mainactivity中使用:

package com.example.baseactivity

import android.os.Bundle

class MainToolbarActivity : BaseToolbarActivity() {

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

        setToolbarTitle("主页")

    }
    //设置布局
    override fun setlayout(): Int {
        return R.layout.activity_main
    }


}

demo地址:https://download.csdn.net/download/wy313622821/12799128

猜你喜欢

转载自blog.csdn.net/wy313622821/article/details/108347514