如何正确编写视图类的kotlin扩展名,该分类可以根据SDK/API版本调用FindViewById或requientViewById? 我正在为一个Android项目提供,以增加对较旧的Android版本的支持。问题在于,View类的方法只能从SDK 28中获得,我试图低于此类,...

问题描述 投票:0回答:0
中获得,我正在尝试低于该类别,只有

sdk 28

可用。我正在尝试编写一个“开关”功能,该功能将根据Android版本调用任何一种方法,因此每个人都很高兴。
即将替换为
findViewById
requireViewById
感觉是错误的,因为将来后者可能会被弃用。 一般来说,是否有任何优雅的方法可以进行这样的开关,而不会重写太多代码?
我尝试过的是:我在Android Studio项目中有一个

findViewById

文件,其中定义了该功能:

UiUtils.kt
该功能是从this Answer

借来的

AlfredoTostón

。
但是,Android Studio标记了RED所有出现(校正:仅标记了整个项目的接收器,而不是
getViewById
),并且每当我悬停任何一个时,都会给我一个错误:

... import android.os.Build import android.view.View import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity ... fun <T : View> View.getViewById(id: Int): T = when { Build.VERSION.SDK_INT >= Build.VERSION_CODES.P -> requireViewById<T>(id) else -> findViewById(id) ?: throw IllegalArgumentException() } ... fun AppCompatActivity.setupToolbarInsets() { val spacer = getViewById<View>(R.id.toolbar_spacer) }
    

我在旧项目中也有相同的方案,我创建了2个不同的视图来处理视图和活动方案,创建单独的扩展功能: Activity 也许这对您有帮助


android kotlin extension-methods type-mismatch appcompatactivity
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.