Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Kotlin + Hilt:向对象类注入活动上下文

Kotlin + Hilt:向对象类注入活动上下文
EN

Stack Overflow用户
提问于 2022-08-21 03:01:36
回答 1查看 225关注 0票数 1

我有一个对象,它有许多与屏幕相关的方法(这里我只举两个例子)如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
object AWScreen {

    private lateinit var context: Context

    fun init(context: Context) {
        this.context = context
    }

    private fun getScreenHeightAlternative(oContext: Context): Int {
        val display = oContext.resources.displayMetrics
        return display.heightPixels
    }

    fun getScreenWidth(context: Context?): Int {
        val size = Point()
        var screenWidth = 0
        try {
            (context as Activity).windowManager.defaultDisplay.getRealSize(size)
            screenWidth = size.x
        } catch (e: NoSuchMethodError) {
            e.printStackTrace()
        }
        return screenWidth
    }
}

我正在尝试初始化应用程序类-when应用程序中的所有依赖项(本例中仅为上下文)-如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@HiltAndroidApp
class AWApplication : MultiDexApplication() {

    override fun onCreate() {
        super.onCreate()

        AWScreen.init(this)
    }
}

但是,如您所见,我得到的是应用程序上下文,而不是活动上下文(访问资源所需的内容)。

我可以这么做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
AWScreen.init(this)

在任何依赖于AWScreen onCreate的活动中,我都试图避免这一点,因为AWScreen在我的应用程序中被广泛使用,我不想重复代码,事实上,这就是Hilt (依赖注入)的目的。

在简历中,我有许多自定义类(对象),在这些类中,我需要一个活动上下文(而不是应用程序上下文)来访问资源(或任何其他类(取决于上下文)),但我不知道如何使用Hilt以“依赖注入方式”提供它,并避免在每个活动中初始化该对象的依赖项。

编辑1:

正如@مصطفىنعمه所提到的,我可以使用任何上下文(活动上下文和应用程序上下文)访问资源,但是在我的مصطفىنعمه类中有如下方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private fun getSoftButtonsBarHeight(oActivity: Activity): Int {
        val metrics = DisplayMetrics()
        oActivity.windowManager.defaultDisplay.getMetrics(metrics)
        val usableHeight = metrics.heightPixels
        oActivity.windowManager.defaultDisplay.getRealMetrics(metrics)
        val realHeight = metrics.heightPixels
        return if (realHeight > usableHeight) realHeight - usableHeight else 0
    }

在这里,我需要访问windowManager,而windowManager只在活动上下文中可用,因此,要明确的是,我需要知道的是如何将活动上下文注入自定义类。

EN

回答 1

Stack Overflow用户

发布于 2022-08-21 03:20:09

我不完全理解你的问题,但是

您可以通过应用程序上下文访问资源,通常如下所示:注入上下文后->->

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
val someString = context?.resources.getString(R.string.some_string) //context is nullable so "?" is needed
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73433783

复制
相关文章
上手指南 | Jetpack Hilt 依赖注入框架
一个类里面有一个变量,这个变量就是这个类的依赖。然后通过外部注入对这个变量进行赋值,这种就叫做依赖注入。
345
2022/02/11
1.9K0
Jetpack Hilt 依赖注入框架上手指南
链接:https://juejin.im/post/5efdff9d6fb9a07eb7357ac9
陈宇明
2020/12/16
1.5K0
Android--Hilt入门
和Dagger相同,Hilt也分两种注入方式,以上篇Dagger中的代码为例子,来对比两个框架的使用区别
aruba
2021/12/16
1.5K0
Android--Hilt入门
Kotlin 类和对象介绍
介绍:在Kotlin中类可以包含:构造函数和初始化代码块,函数,属性,内部类,对象声明. 使用的关键字和java是一样的使用class进行声明
zinyan.com
2023/07/13
2090
Kotlin 类和对象介绍
Kotlin 中使用 Hilt 的开发实践
Hilt 是基于 Dagger 开发的全新的依赖项注入代码库,它简化了 Android 应用中 Dagger 的调用方式。本文通过简短的代码片段为您展示其核心功能以帮助开发者们快速入门 Hilt。
Android 开发者
2022/03/09
1.2K0
kotlin--综合运用Hilt、Paging3、Flow、Room、Retrofit、Coil等实现MVVM架构
前面我们使用Java来运用JetPack中的一系列组件,又使用kotlin运用这些组件实现了一系列功能: kotlin--Flow文件下载 kotlin--Flow结合Room运用 kotlin--Flow结合retrofit运用 kotlin--StateFlow运用 kotlin--SharedFlow运用 接着,Jetpack的Paging3中,我们使用的语言是kotlin,相信通过这些项目的对比,你就能发现koltin取代Java的理由了,kotlin拥有更好的扩展性,更高的性能,更简洁的代码,更好
aruba
2021/12/06
3.6K0
kotlin--综合运用Hilt、Paging3、Flow、Room、Retrofit、Coil等实现MVVM架构
Hilt-依赖注入框架上手指南
Hilt 是Google 最新的依赖注入框架,其是基于Dagger研发,但它不同于Dagger。对于Android开发者来说,Hilt可以说专门为Android 打造,提供了一种将Dagger依赖项注入到Android应用程序的标准方法,而且创建了一组标准的组件和作用域,这些组件会自动集成到Android应用程序的各个生命周期中,以简化开发者的上手难度。
Petterp
2022/02/09
1.8K0
Hilt-依赖注入框架上手指南
Kotlin Primer·类与对象(上)
前面三章的内容是写给希望快速了解 Kotlin 语言的大忙人的。 而从本章开始,才会真正讲述 Kotlin 语言的神奇之处。 与 Java 相同,Kotlin 声明类的关键字是class。类声明由类名、类头和类体构成。 其中类头和类体都是可选的; 如果一个类没有类体,那么花括号也是可以省略的。 4.1 构造函数 Kotlin 的构造函数可以写在类头中,跟在类名后面,如果有注解还需要加上关键字constructor。这种写法声明的构造函数,我们称之为主构造函数。例如下面我们为Person创建带一个Stri
用户1907613
2018/07/20
6700
上手指南 | Jetpack Hilt 依赖注入框架
一个类里面有一个变量,这个变量就是这个类的依赖。然后通过外部注入对这个变量进行赋值,这种就叫做依赖注入。
345
2022/02/15
1.6K0
Android Hilt实战初体验: Dagger替换成Hilt
在组件化AwesomeGithub项目中使用了Dagger来减少手动依赖注入代码。虽然它能自动化帮我们管理依赖项,但是写过之后的应该都会体会到它还是有点繁琐的。项目中到处充斥着Component,这让我想起了传统MVP模式的接口定义。
Rouse
2020/07/21
1.8K0
哔哩哔哩在Hilt组件化的使用 | 技术探索
最近业务同学需要接入谷歌推的Hilt框架。因为哔哩哔哩的业务上很容易出现业务层面的交叉,而因为项目完成了大量的组件化拆分。由于不希望业务之间产生相互引用,所有在技术评估完成之后我们决定由我们部门来对Hilt进行接入。
逮虾户
2022/03/06
1.2K0
哔哩哔哩在Hilt组件化的使用 | 技术探索
Jetpack新成员,一篇文章带你玩转Hilt和依赖注入
虽然今年的Google I/O大会由于疫情的原因没能开成,但是Google每年要发布的各种新技术可一样都没少。
用户1158055
2020/11/26
2.6K0
Jetpack新成员,一篇文章带你玩转Hilt和依赖注入
Kotlin学习日志(五)类与对象
通过上述的代码比较,Kotlin对类的写法与Java之间有以下几点区别: (1)Kotlin省略了关键字public,因为Kotlin默认类是开放的,所以不需要这个关键字。 (2)Kotlin用冒号“:”代替extends,也就是通过冒号表示继承关系。 (3)Kotlin进行继承时,父类后面多了括号“()”。
晨曦_LLW
2020/09/25
1.2K0
Kotlin | 4.类、对象和接口
本章内容包括: 类和接口 非默认属性和构造方法 数据类 类委托 使用 object 关键字 1、定义类继承结构 /*--------------- 4.1.1 kotlin 中的接口-------------*/ // 代码清单 1 声明一个简单的接口 // interface Clickable { // fun click() // } // 代码清单 2 实现一个简单的接口 cla
Jingbin
2021/02/22
9620
kotlin基础--对象、接口、抽象类
如果你想要某个对象和一个类实例化绑定在一起,可以考虑伴生对象,使用 companion object 可以在一个类里定义一个伴生对象,一个类只能有一个伴生对象, 伴生对象也是静态的,只会在类实例化或调用伴生对象中的内容(对象和函数)时实例化一次
aruba
2021/12/06
4320
kotlin基础--对象、接口、抽象类
Hilt三问—你了解依赖注入吗
今天继续Jetpack专题,相信不少的朋友都使用过Dagger,也放弃过Dagger,因为实在太难用了。所以官方也是为了让我们更好使用依赖注入框架,为我们封装了一个新的框架——Hilt,今天一起来看看:
码上积木
2020/11/09
1.2K0
在 Android 中通过 Hilt 进行依赖项注入
DI (依赖项注入) 是一种在程序设计中被广泛使用的技术,非常适合 Android 开发,该技术可以将依赖项提供给类,从而让类不必自己创建这些依赖。通过遵循 DI 原则,您将为良好的应用架构、更高的代码复用性和便捷的测试奠定基础。您是否尝试过在应用中进行手动依赖项注入?即使使用了当今许多现有的依赖项注入库,随着您的项目越来越大,这些库仍需要大量模板代码,因为您必须手动构造每个类及其依赖项,并创建容器用来复用和管理依赖项。
Android 开发者
2022/03/09
1.9K0
【Kotlin】Kotlin 面向对象 ( 类 | 成员变量 | 成员方法 | 封装 | 继承 | 多态 )
② 定义字段 : 在类后的括号内 , 使用 var 字段名称:字段类型 可以定义一个字段 ;
韩曙亮
2023/03/27
6410
Android Jetpack 更新一览
作者 / Florina Muntenescu, Android Developer Advocate
Android 开发者
2022/03/09
1.6K0
Android Jetpack 更新一览
从 Dagger 到 Hilt,谷歌为何执着于让我们用依赖注入?
说到依赖注入,做 Android 的人都会想到一个库:Dagger;说到 Dagger,大家的反应普遍是一套三连:牛逼、高端、我才不用。
扔物线
2020/07/31
1.4K0
从 Dagger 到 Hilt,谷歌为何执着于让我们用依赖注入?

相似问题

Android + Kotlin + Hilt:注入对象类

11

Android + Kotlin + Hilt:无法@注入非活动类

114

Android + Kotlin + Hilt:注入静态方法类

13

使用Hilt注入活动

29

Dagger Hilt如何向ViewModel注入类

114
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文