The most comprehensive utils of ViewBinding.

Overview

ViewBindingKTX

English | 中文

ViewBinding reduces exceptions caused by id or type errors, which are recommended by both Google officials and Jake Wharton, but it can be a bit cumbersome to use, so this library can help you use ViewBinding with as little code as possible in any usage scenario.

Feature

  • Support for the usage of Kotlin and Java
  • Support for the usage of reflection and non-reflection
  • Support to modify your base class to support ViewBinding
  • Support for BaseRecyclerViewAdapterHelper
  • Support for Activity, Fragment, Dialog, Adapter
  • Support automatic release of binding class instance in Fragment
  • Support for custom combination view
  • Support for TabLayout to set custom view
  • Support for NavigationView to set header view
  • Support for DataBinding to automatically set the lifecycle owner

Gradle

Add it in your root build.gradle at the end of repositories:

allprojects {
    repositories {
        ...
        maven { url 'https://www.jitpack.io' }
    }
}

Add dependencies and configurations:

android {
    buildFeatures {
        viewBinding = true
    }
}

dependencies {
    // The following are optional, please add as needed
    implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-ktx:1.2.4'
    implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-nonreflection-ktx:1.2.4'
    implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-base:1.2.4'
    implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-brvah:1.2.4'
}

Wiki

Kotlin usage

Java usage

Others

Change log

Releases

Author's other libraries

Library Description
Longan A collection of Kotlin utils which makes Android application development faster and easier.
LoadingStateView Decoupling the code of toolbar or loading status view.
MMKV-KTX Easier to use the MMKV.
ActivityResultLauncher Replace startActivityForResult() method gracefully.

Thanks

Thanks ViewBindingPropertyDelegate for providing an idea without reflection

License

Copyright (C) 2020. Dylan Cai

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Comments
  • 请问BRVAH的多布局中也可以直接用吗

    请问BRVAH的多布局中也可以直接用吗

    多布局的样式是继承的BaseItemProvider,重写的方法是onCreateViewHolder, 也可以直接这样写吗? override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder { return super.onCreateViewHolder(parent, viewType).withBinding { ItemFooBinding.bind(it) } }

    opened by HeJingWei 4
  • 使用viewbind之后打release包反射报错

    使用viewbind之后打release包反射报错

    作者有遇到如下问题吗? 打release包打开app就闪退, 报错内容是java.lang.ClassCastException: libcore.reflect.WildcardTypeImpl cannot be cast to java.lang.Class 代码很简单:

    abstract class BaseActivity<VB : ViewBinding> : AppCompatActivity() {
      protected lateinit var binding: VB
    
      abstract fun initView()
    
      override fun onCreate(savedInstanceState: Bundle?) {
          super.onCreate(savedInstanceState)
    
          val type = javaClass.genericSuperclass as ParameterizedType
          val aClass = type.actualTypeArguments[0] as Class<*>
          val method = aClass.getDeclaredMethod("inflate", LayoutInflater::class.java)
          val cls = method.invoke(null, layoutInflater)
          binding = cls as VB
    
          setContentView(binding.root)
    
          initView()
      }
    }
    
    class MainActivity : BaseActivity<ActivityMainBinding>() {
      override fun initView() {
      }
    }
    

    加了混淆规则还是无效:

    -keepclassmembers class * implements androidx.viewbinding.ViewBinding {
      public static * inflate(android.view.LayoutInflater);
      public static * inflate(android.view.LayoutInflater, android.view.ViewGroup, boolean);
      public static * bind(android.view.View);
    }
    

    作者有什么解决方法嘛?

    opened by iotxc 3
  • Fragment绑定失败?

    Fragment绑定失败?

    版本号:2.0.5

    Fragment绑定失败?原始代码为:

    <!-- activity_main.xml -->
    <androidx.fragment.app.FragmentContainerView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:name="**.main.MainFragment"
        android:fitsSystemWindows="true"/>
    
    <!-- MainFragment -->
    class MainFragment : Fragment() {
        private val binding:FragmentMainBinding by binding()
    
        override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            super.onViewCreated(view, savedInstanceState)
            binding.content.text = "123456"
        }
    }
    

    但是在页面中,MainFragment的布局无法加载出来。

    查看源码,发现并没有将View绑定至Fragment的相关代码:

    class FragmentBindingProperty<VB : ViewBinding>(private val clazz: Class<VB>) : ReadOnlyProperty<Fragment, VB> {
    
      override fun getValue(thisRef: Fragment, property: KProperty<*>): VB =
        requireNotNull(thisRef.view) { "The property of ${property.name} has been destroyed." }
          .getBinding(clazz).also { binding ->
            if (binding is ViewDataBinding) binding.lifecycleOwner = thisRef.viewLifecycleOwner
          }
    }
    

    是否和这个有关系?

    opened by aheven 2
  • 大佬,用常规方式没问题,但是我这么写居然不行,没太明白~

    大佬,用常规方式没问题,但是我这么写居然不行,没太明白~

    fun <T, VB : ViewBinding> RecyclerView.onBindAdapter(itemBind: (BaseBindingQuickAdapter.BaseBindingHolder, T) -> Unit){ val bindingAdapter by lazy { object :BaseBindingQuickAdapter<T, VB >(){ override fun convert(holder: BaseBindingHolder, item: T) { itemBind.invoke(holder,item) } } } this.adapter=bindingAdapter }

    opened by xuehao0217 2
  • java.lang.reflect.InvocationTargetException

    java.lang.reflect.InvocationTargetException

    layout file:

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
    
      <com.github.piasy.biv.view.BigImageView
          android:id="@+id/ivImg"
          android:layout_width="match_parent"
          android:layout_height="match_parent"/>
    
    </FrameLayout>
    

    配合Multitype的基类封装,BigImageView换成其他View都正常..但是就是com.github.piasy.biv.view.BigImageView会出这个错 但是在配合fragment封装的基类使用也没有问题

    opened by asker517 2
  • Cannot inline bytecode built with JVM target 1.8 into bytecode that is being built with JVM target 1.6. Please specify proper '-jvm-target' option

    Cannot inline bytecode built with JVM target 1.8 into bytecode that is being built with JVM target 1.6. Please specify proper '-jvm-target' option

    我在使用的时候出现这个问题,它提示我以下错误信息: image Cannot inline bytecode built with JVM target 1.8 into bytecode that is being built with JVM target 1.6. Please specify proper '-jvm-target' option 但是我运行的时候他没有任何问题。 而且在app -> build.gradle 中添加了以下代码,并没有什么用。 image

    opened by Chen-Xi-g 2
  • FragmentBindingDelegate 这个委托类中使用后备属性(支持属性技术)shifou

    FragmentBindingDelegate 这个委托类中使用后备属性(支持属性技术)shifou

    image

    下划线后备属性本意是为了 延迟初始化。但是这里by委托类 getValue本身就近似达到了延迟初始化的要求

    且binding的get()方法并无特殊功用,没有体现后备属性的用法,

    看起来使用后备属性仅仅是不想多写!!而已

    看我的图。我实在不知道不知道为什么会多写两行,虽然对 后备属性私有访问,编译器是可以不调用getter方法,无函数调用损耗,但是多写这个我认为无用的代码,我实在看着别扭,往大佬打脸指教下。

    为了这个细小问题,我搜索看了好多文章对于后备字段,后备属性,支持属性,延迟初始化,惰性初始化的讲解,最后汇总还是感觉图上的委托类,getvalue方法中对后备属性的使用时多余的很,这个问题我在 很多地方见到过,比如

    张鸿阳kotlin-android-extensions 插件也被废弃了?扶我起来一文中 image 对viewbing在fragment中的初始化也是用的后备属性,我对此写法的看法是优点在于后面在使用viewbing字段的时候不用每次都写!!毕竟fragment中对viewbing的调用可能有很多次,省下!!也是值得的,

    所以大佬你的委托类不对外开放,却使用了后备属性节约了一点点 对!!的书写,实在感觉怪怪的。

    这个问题困扰我好久了,大佬抽出时间解答探讨下,就不胜感激了!!

    opened by cocowobo 2
  • fragment中销毁binding时机

    fragment中销毁binding时机

    不建议这么使用 thisRef.viewLifecycleOwner.lifecycle.addObserver(object : LifecycleObserver { @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) fun onDestroyView() { Log.e("taggg", "onDestroyView viewLifecycleOwner$this") _binding = null } }) 因为这会导致比fragment更快的执行onDestroyView方法

    opened by wumeixinjiazu 1
  • release 混淆报错

    release 混淆报错

    E/AndroidRuntime: FATAL EXCEPTION: main Process: com.android.sms, PID: 4568 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.sms/com.android.sms.ui.splash.SplashActivity}: java.lang.IllegalArgumentException: There is no generic of ViewBinding. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3752) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3920) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2345) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:264) at android.app.ActivityThread.main(ActivityThread.java:8268) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:632) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1049) Caused by: java.lang.IllegalArgumentException: There is no generic of ViewBinding. at p1.a.b(ViewBindingUtil.kt:90) at p1.a.a(ViewBindingUtil.kt:35) at cc.jianke.mvvmmodule.viewbinding.BaseViewBindingActivity.onCreate(BaseViewBindingActivity.kt:20) at android.app.Activity.performCreate(Activity.java:8151) at android.app.Activity.performCreate(Activity.java:8135) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3721) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3920)  at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)  at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)  at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2345)  at android.os.Handler.dispatchMessage(Handler.java:106)  at android.os.Looper.loop(Looper.java:264)  at android.app.ActivityThread.main(ActivityThread.java:8268)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:632)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1049) 

    opened by wlingf 17
  • 不同路径名使用出现(library下使用)

    不同路径名使用出现(library下使用)

    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.vis.ls/com.wzg.watermarkCamera.CameraActivity}: java.lang.reflect.InvocationTargetException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3308) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3457) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2044) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:224) at android.app.ActivityThread.main(ActivityThread.java:7560) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method) at com.dylanc.viewbinding.base.ViewBindingUtil$inflateBindingWithGeneric$1.invoke(ViewBindingUtil.kt:36) at com.dylanc.viewbinding.base.ViewBindingUtil$inflateBindingWithGeneric$1.invoke(ViewBindingUtil.kt:35) at com.dylanc.viewbinding.base.ViewBindingUtil.withGenericBindingClass(ViewBindingUtil.kt:71) at com.dylanc.viewbinding.base.ViewBindingUtil.inflateWithGeneric(ViewBindingUtil.kt:35) at com.wzg.watermarkCamera.BindingActivity.onCreate(BindingActivity.java:24) at com.wzg.watermarkCamera.CameraActivity.onCreate(CameraActivity.java:69) at android.app.Activity.performCreate(Activity.java:7899) at android.app.Activity.performCreate(Activity.java:7886)

    opened by wzg-githome 4
Releases(2.1.0)
  • 2.1.0(Jun 21, 2022)

    viewbinding-base

    • Add new class ActivityBinding, ActivityBindingDelegate, FragmentBinding, FragmentBindingDelegate.
    • Easier to add ViewBinding to base classes by Kotlin delegate. ( Activity sample / Fragment sample )

    viewbinding-base

    • 添加新类 ActivityBindingActivityBindingDelegateFragmentBindingFragmentBindingDelegate
    • 使用 Kotlin 委托特性能更简单地把 ViewBinding 集成到基类。 ( Activity 示例 / Fragment 示例 )
    Source code(tar.gz)
    Source code(zip)
  • 2.0.6(May 10, 2022)

  • 2.0.5(Apr 7, 2022)

  • 2.0.4(Apr 7, 2022)

  • 2.0.3(Apr 4, 2022)

  • 2.0.2(Mar 1, 2022)

  • 2.0.1(Jan 11, 2022)

    viewbinding-ktx

    • Add TabLayout#updateCustomTab<VB>(index) {...}

    viewbinding-nonrefleciton-ktx

    • Add TabLayout#updateCustomTab(VB::bind, index) {...}

    viewbinding-base

    • Add the abstract class of SimpleIntListAdapter<VB>
    • Add the abstract class of SimpleLongListAdapter<VB>
    • Add the abstract class of SimpleBooleanListAdapter<VB>
    • Add the abstract class of SimpleFloatListAdapter<VB>
    • Add the abstract class of SimpleDoubleListAdapter<VB>
    • Add the abstract class of SimpleStringListAdapter<VB>
    • Add simpleIntListAdapter<VB> {...}
    • Add simpleLongListAdapter<VB> {...}
    • Add simpleBooleanListAdapter<VB> {...}
    • Add simpleFloatListAdapter<VB> {...}
    • Add simpleDoubleListAdapter<VB> {...}
    • Add simpleStringListAdapter<VB> {...}
    • Add the class of IntDiffCallback
    • Add the class of LongDiffCallback
    • Add the class of BooleanDiffCallback
    • Add the class of FloatDiffCallback
    • Add the class of DoubleDiffCallback
    • Add the class of StringDiffCallback
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0(Jan 4, 2022)

    viewbinding-ktx

    • Remove TabLayout.Tab#bindCustomView<VB> {...}
    • Remove View#bind<VB>()
    • Add TabLayout#doOnCustomTabSelected<VB>(...)
    • Add View#getBinding<VB>()
    • Add ViewHoler#getBinding<VB>()
    • Add ViewHoler#withBinding<VB> {...}
    • Add Activity/Fragment#popupWindow<VB> {...}

    viewbinding-nonrefleciton-ktx

    • Remove TabLayout.Tab#bindCustomView(VB::bind) {...}
    • Remove View#bind(VB::bind)
    • Add TabLayout#doOnCustomTabSelected(VB::bind, ...)
    • Add View#getBinding(VB::bind)
    • Add ViewHoler#getBinding(VB::bind)
    • Add ViewHoler#withBinding(VB::bind) {...}
    • Add Activity/Fragment#popupWindow(VB::bind) {...}

    viewbinding-base

    • Remove Any#inflateBindingWithGeneric(...)
    • Remove Any#bindViewWithGeneric(view)
    • Add ViewBindingUtil.inflateWithGeneric(this, ...)
    • Add ViewBindingUtil.bindWithGeneric(this, view)
    • Add the class of SimpleListAdapter<T, VB>
    • Add simpleListAdapter<T, VB>(diffCallback) {...}

    viewbinding-brvah

    • Remove BindingHolderUtil.kt
    • Add BaseViewHolder#getBinding(VB::bind)
    Source code(tar.gz)
    Source code(zip)
  • 1.2.6(Nov 19, 2021)

  • 1.2.5(Nov 16, 2021)

  • 1.2.4(Aug 12, 2021)

  • 1.2.3(Jun 29, 2021)

  • 1.2.2(Jun 10, 2021)

  • 1.2.1(May 24, 2021)

    • Add binding parameter to BindingLifecycleOwner#onDestroyViewBinding
    • Support for viewbinding-base to automatically set the lifecycle owner of DataBinding
    • Fixed an issue with reflection failure of bindViewWithGeneric (#19)
    Source code(tar.gz)
    Source code(zip)
  • 1.2.0(May 15, 2021)

    Change the jcenter dependencies to the Jitpack dependencies

    • Add TabLayout.Tab#bindCustomView(VB.() -> Unit)
    • Add Fragment#binding(Method) (#16)
    • Add a new interface BindingLifecycleOwner for Fragment
    • Add BindingViewHolder#onBinding(VB.(Int) -> Unit)
    • Add BindingViewHolder#onItemClick(VB.(Int) -> Unit)
    • Fix a ClassCastException for the base library (#15)
    • Change the return value of ViewGroup#binding() to a lazy properties
    Source code(tar.gz)
    Source code(zip)
  • 1.1.2(Apr 16, 2021)

  • 1.1.1(Mar 31, 2021)

  • 1.1.0(Mar 29, 2021)

    Feature

    • Support for the usage of Kotlin and Java
    • Support for the usage of reflection and non-reflection
    • Support to modify your base class to support ViewBinding
    • Support for BaseRecyclerViewAdapterHelper
    • Support for Activity, Fragment, Dialog, Adapter
    • Support automatic release of binding class instance in Fragment
    • Support for custom combination view
    • Support for TabLayout to set custom view
    Source code(tar.gz)
    Source code(zip)
  • 1.0.1(Jan 7, 2021)

Owner
DylanCai
一个兴趣使然的程序“工匠”。
DylanCai
Screen Capture Utils - A plugin to handle screen capture events on android and ios

Screen Capture Utils A plugin to handle screen capture events on android and ios ?? Initialize SDK late ScreenCaptureUtils screenCaptureUtils;

Chiziaruhoma Ogbonda 41 Apr 12, 2022
Multiplaform kotlin library for calculating text differences. Based on java-diff-utils, supports JVM, JS and native targets.

kotlin-multiplatform-diff This is a port of java-diff-utils to kotlin with multiplatform support. All credit for the implementation goes to original a

Peter Trifanov 51 Jan 3, 2023
A utils to change statusbar for Android.

StatusBar 一个Android状态栏工具类,可以设置状态栏颜色、文字深浅、是否隐藏状态栏。 效果预览 注意 最低支持版本为Android5.0(minSdkVersion 21) 本项目仅提供AndroidX版本 在setContentView()之后调用 特点 支持状态栏颜色修改 支持状态

CSDN Mobile 6 May 5, 2022
🇧🇷 Utils library for Brazilian specific businesses

???? Brazilian Toolkit ???? Utils library for Brazilian specific businesses. Including in your project Gradle Add below codes to your root build.gradl

Geovani Amaral 14 Jan 7, 2023
🇧🇷 Utils library for Brazilian specific businesses

???? Brazilian Toolkit ???? Utils library for Brazilian specific businesses. Including in your project Gradle Add below codes to your root build.gradl

Geovani Amaral 13 Aug 13, 2022
A small library which will save you from writing the same intent creation code again and again for the most simple tasks

Android Intents A small library which will save you from writing the same intent creation code again and again for the most simple tasks. I found myse

MarvinLabs 420 Nov 20, 2022
A helper library to ease the most repetitive codes with simple reusable attributes.

ak-universal-android-helper A helper library to ease the most repetitive codes with simple reusable attributes. AKUAH can help you with many repetitiv

Aakash Kumar 20 Jul 8, 2020
compaKTset is a small library aimed at providing you with the most memory efficient Set implementation for any particular data type of your choosing.

compaKTset is a small library aimed at providing you with the most memory efficient Set implementation for any particular data type of your choosing.

Ignat Beresnev 3 Nov 16, 2021
Mi-FreeForm - An APP that is activated through Shizuku/Sui and can display most apps in the form of freeform

Mi-FreeForm 简体中文 Mi-FreeForm is an APP that is activated through Shizuku/Sui and

KindBrive 181 Dec 31, 2022
MUGHome.Utils.Flarum - MUGHome Utils of Flarum API

MUGHome Utils of Flarum API [WIP] How to use add this to your repositories r

MUGHomeDev 2 Apr 4, 2022
A comprehensive tutorial for Android Data Binding

精通 Android Data Binding 更多干货可移步至个人主页 QQ 交流群:324112728 ,或者点击链接加入QQ群 官方虽然已经给出了教程 - Data Binding Guide (中文版 - Data Binding(数据绑定)用户指南) ,但是实践之后发现槽点实在太多,于是就

Fei Liang 2.6k Dec 6, 2022
Support extension to use Android ViewBinding quickly and smooth transform from kotlin-synthetic-extension.

ViewBinding Delegate Extension Support extension to use Android ViewBinding quickly and smooth transform from kotlin-synthetic-extension. Binding inst

Cuong V. Nguyen 3 Dec 13, 2021
Simple API implement DataBinding and ViewBinding.

Binding has been migrated to Maven Central because jCenter will be deprecated

Jack  Deng 385 Jan 5, 2023
It is a NBAApp developed by Kotlin. It uses MVVM design pattern, Coroutines, Retrofit and JetPack libraries like Room, Lifecycle, ViewBinding, DataBinding, Hilt and Navigation.

NbaApp It is a NBAApp developed by Kotlin. It uses MVVM design pattern, Coroutines, Retrofit and JetPack libraries like Room, Lifecycle, ViewBinding,

Tuna Ateş Koç 2 Feb 26, 2022
ViewBinding, ViewModel Sample code

Sample_viewBiningK viewBinding, viewModel 샘플코드입니다. 코드출처 app: "모던 안드로이드 아키텍쳐 - Room + LiveData + ViewModel 대통합(https://www.youtube.com/watch?v=fUbiWZ2g

Hong SeongChan 0 Jan 1, 2022
RecyclerView Application example using kotlin and viewbinding.

SimpleRecyclerViewApp Shows how to display some items in a simple list using the RecyclerView and RecycleView.Adapter. The RecycleView is the entity t

Google Developers 2 Mar 28, 2022
MVVM ,Hilt DI ,LiveData ,Flow ,Room ,Retrofit ,Coroutine , Navigation Component ,DataStore ,DataBinding , ViewBinding, Coil

MVVM ,Hilt DI ,LiveData ,Flow ,Room ,Retrofit ,Coroutine , Navigation Component ,DataStore ,DataBinding , ViewBinding, Coil

Ali Assalem 12 Nov 1, 2022
MVVM ,Hilt DI ,LiveData ,Flow ,SharedFlow ,Room ,Retrofit ,Coroutine , Navigation Component ,DataStore ,DataBinding , ViewBinding, Coil

RickMorty This is a simple app which has been implemented using Clean Architecture alongside MVVM design to run (online/offline) using : [ MVVM ,Hilt

Ali Assalem 13 Jan 5, 2023
Android common lib, include ImageCache, HttpCache, DropDownListView, DownloadManager, Utils and so on

android-common-lib 关于我,欢迎关注 微博:Trinea 主页:trinea.cn 邮箱:trinea.cn#gmail.com 微信:codek2 主要包括:缓存(图片缓存、预取缓存、网络缓存)、公共View(下拉及底部加载更多ListView、底部加载更多ScrollView、

Trinea 5k Dec 30, 2022