8000 GitHub - FlyJingFish/ViewBindingPro: 🔥🔥🔥使用ViewBinding之后,您在 BaseActivity 或 BaseFragment 等基类配置一个注解就可以为 子类自动注入加载代码,无需使用反射
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

🔥🔥🔥使用ViewBinding之后,您在 BaseActivity 或 BaseFragment 等基类配置一个注解就可以为 子类自动注入加载代码,无需使用反射

License

Notifications You must be signed in to change notification settings

FlyJingFish/ViewBindingPro

Repository files navigation

简体中文 | English

🔥🔥🔥增强ViewBinding的使用场景 ViewBindingPro

Build Downloads Python Package Index Docker Pulls Sponsors

简述

        使用这个框架之后,您在 BaseActivity 或 BaseFragment 等基类配置一个注解就可以为 子类自动注入加载代码,无需使用反射

使用步骤

在开始之前可以给项目一个Star吗?非常感谢,你的支持是我唯一的动力。欢迎Star和Issues!

一、引入插件(必须)

  • 新版本

    plugins {
        //必须项 👇 apply 设置为 true 
        id "io.github.FlyJingFish.ViewBindingPro" version "1.0.4" apply true
    }
  • 或者老版本

      buildscript {
          dependencies {
              //必须项 👇
              classpath 'io.github.FlyJingFish.ViewBindingPro:viewbindingpro-plugin:1.0.4'
          }
      }
      // 👇加上这句自动为所有module设置
      apply plugin: "viewbinding.pro"

二、引入依赖库(必须)

dependencies {
    //必须项 👇
    implementation 'io.github.FlyJingFish.ViewBindingPro:viewbindingpro-core:1.0.4'
}

Tip

如果你希望打包后的代码中不包含 viewbindingpro-core 库,可以改为 compileOnly 方式引入

三、使用方法

ViewBinding

  • BaseActivity
abstract class BaseActivity<VB :ViewBinding>:AppCompatActivity() {
    @BindViewBinding(position = 0, methodName = "void onCreate(android.os.Bundle)", isProtected = true, bindingType = BingType.INFLATE)
    protected lateinit var binding :VB


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root)
    }

}
  • BaseFragment
abstract class BaseFragment<VB : ViewBinding>: Fragment() {
    @BindViewBinding(position = 0, methodName = "android.view.View onCreateView(android.view.LayoutInflater,android.view.ViewGroup,android.os.Bundle)",  isProtected = false,bindingType = BingType.INFLATE_FALSE)
    protected lateinit var binding :VB
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        return binding.root
    }
}

绑定class

  • BaseActivity
abstract class BaseVMActivity<VB :ViewBinding,VM: ViewModel>:BaseActivity<VB>() {
    @BindClass(position = 1, insertMethodName = "void onCreate(android.os.Bundle)", callMethodName = "androidx.lifecycle.ViewModel initViewModel(java.lang.Class)",isProtected = false)
    protected lateinit var mViewModel : VM


    fun initViewModel(clazz: Class<out ViewModel>):ViewModel {
        return ViewModelProvider(this)[clazz]
    }
}
  • BaseFragment
abstract class BaseVMFragment<VB :ViewBinding,VM: ViewModel>:BaseFragment<VB>() {
  @BindClass(position = 1, insertMethodName = "android.view.View onCreateView(android.view.LayoutInflater,android.view.ViewGroup,android.os.Bundle)", callMethodName = "androidx.lifecycle.ViewModel initViewModel(java.lang.Class)",isProtected = false)
  protected lateinit var mViewModel : VM

  fun initViewModel(clazz: Class<out ViewModel>):ViewModel {
    return ViewModelProvider(this)[clazz]
  }
}

上述两个例子都会在实现类的相应方法中,调用 initViewModel

取消注入代码

@CancelBindViewBinding
@CancelBindClass
class MainActivity:BaseVMActivity<ActivityMainBinding,ExampleViewModel>() {
}
  • CancelBindViewBinding 是取消注入 ViewBinding
  • CancelBindClass 是取消注入 class

四、开关(非必须)

在根目录的 gradle.properties 中增加如下设置

#设置为false即可关闭自动注入功能
viewbindingpro.enable = true 

番外

如果你的module全部为 kotlin 代码,有可能插件不生效,目前的处理方法有两个

  • 1、在根目录的 gradle.properties 中增加如下设置
android.defaults.buildfeatures.buildconfig=true
  • 2、手动为不起作用的 module 增加一个 java 代码

最后推荐我写的另外一些库

About

🔥🔥🔥使用ViewBinding之后,您在 BaseActivity 或 BaseFragment 等基类配置一个注解就可以为 子类自动注入加载代码,无需使用反射

Resources

License

Stars

Watchers

Forks

Packages

No packages published
0