Kotlin之Base基类的简单封装

该博客介绍了Android开发中Activity和Fragment的基础基类封装,包括防止快速点击、隐藏软键盘、页面跳转等实用功能。同时展示了如何进行布局初始化、控件初始化和数据加载的抽象方法,为开发者提供了一种规范的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Activity的Base基类


import android.app.Activity
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.view.MotionEvent
import android.view.View
import android.view.inputmethod.InputMethodManager
import android.widget.EditText
import androidx.appcompat.app.AppCompatActivity
import com.blankj.utilcode.util.ActivityUtils
import com.gyf.immersionbar.ImmersionBar
import kotlin.collections.ArrayList

/*
*
* base基类
* */
abstract class BaseActivity : AppCompatActivity() {

    init {
        //防止快速点击
        // 两次点击按钮之间的点击间隔不能少于1000毫秒
        val MIN_CLICK_DELAY_TIME = 1000;
        var lastClickTime: Long? = null
        fun isFastClick(): Boolean {
            var flag = false;
            var curClickTime = System.currentTimeMillis();
            if ((curClickTime - lastClickTime!!) >= MIN_CLICK_DELAY_TIME) {
                flag = true;
            }
            lastClickTime = curClickTime;
            return flag;
        }

        //隐藏软键盘
        fun hideSoftInput() {
            var imm = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
            if (currentFocus != null) {
                imm.hideSoftInputFromWindow(currentFocus?.windowToken, 0);
            }
        }

    }

    var context: Context? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        try {
            setContentView(getLayout())
        } catch (e: Exception) {
            e.message
        }
        //初始化上下文
        context = application
        //初始化控件
        initView()
        //初始化数据
        initData()
    }


    //初始化布局
    abstract fun getLayout(): Int

    abstract fun initView()

    abstract fun initData()

 
    //点击空白地方隐藏软键盘
    open fun hideKeyboard(
        event: MotionEvent, view: View?,
        activity: Activity
    ) {
        try {
            if (view != null && view is EditText) {
                val location = intArrayOf(0, 0)
                view.getLocationInWindow(location)
                val left = location[0]
                val top = location[1]
                val right = (left
                        + view.getWidth())
                val bootom = top + view.getHeight()
                // 判断焦点位置坐标是否在空间内,如果位置在控件外,则隐藏键盘
                if (event.rawX < left || event.rawX > right || event.y < top || event.rawY > bootom
                ) {
                    // 隐藏键盘
                    val token = view.getWindowToken()
                    val inputMethodManager = activity
                        .getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
                    inputMethodManager.hideSoftInputFromWindow(
                        token,
                        InputMethodManager.HIDE_NOT_ALWAYS
                    )
                }
            }
        } catch (e: java.lang.Exception) {
            e.printStackTrace()
        }
    }

    override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
        when (ev.action) {
            MotionEvent.ACTION_DOWN -> {
                val view: View? = currentFocus
                hideKeyboard(ev, view, this) //调用方法判断是否需要隐藏键盘
            }
            else -> {
            }
        }
        return super.dispatchTouchEvent(ev)
    }
    //页面跳转
    open fun activityStart(ctx: Context, clazz: Class<Any>) {
        var intent = Intent()
        intent.setClass(ctx, clazz)
        startActivity(intent)
        overridePendingTransition(0, 0)
    }
}

Fragment的Base基类


import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup


/**
 *
 * baseFragment
 */
abstract class BaseFragment : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        var view=inflater.inflate(getLayout(), container, false)
        return view
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        //加载控件
        initView()
        //加载数据
        initData()
    }
    //初始化布局
    abstract fun getLayout(): Int

    abstract fun initView()

    abstract fun initData()
}

 以上只是我根据项目简单罗列出来的 大家要是有更好的可以在评论区留言互动哈

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值