Как правильно написать расширение Kotlin для класса View, который позвонил бы либо findviewbyid, либо requireviewbyid наAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как правильно написать расширение Kotlin для класса View, который позвонил бы либо findviewbyid, либо requireviewbyid на

Сообщение Anonymous »

Я подкладываю проект Android, чтобы добавить поддержку старых версий Android. Проблема состоит в том, что метод requireviewbyid of view класс доступен только от SDK 28 , и я пытаюсь пройти ниже, где доступен только findviewbyid . Я пытаюсь написать функцию «Switch», которая бы вызвала любой метод на основе версии Android, поэтому все счастливы. Почувствует себя неправильно, потому что последнее может быть устаревшим в будущем.
Вообще говоря, есть ли какой -нибудь элегантный способ сделать такой переключатель без слишком большого переписки кода? < /p>
Что я ' я попробовал: у меня есть Auutils.kt в моем проекте Android Studio, где определяется функция getViewbyId :
...
import android.os.Build
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AppCompatActivity
...
fun View.getViewById(id: Int): T = when {
Build.VERSION.SDK_INT >= Build.VERSION_CODES.P -> requireViewById(id)
else -> findViewById(id) ?: throw IllegalArgumentException()
}
...
fun AppCompatActivity.setupToolbarInsets() {
val spacer = getViewById(R.id.toolbar_spacer)
}

Функция заимствована из этого ответа Alfredo Tostón.
Android Studio, однако отмечает красный все входы (исправление: она только отмечает активность приемники, а не просмотр ) getViewbyid через проект и дает мне ошибку всякий раз, когда я наведу любую из них:
Unresolved reference. None of the following candidates is applicable because of receiver type mismatch:
public fun View.getViewById(id: Int): TypeVariable(T) defined in my.project.util in file UiUtils.kt


Подробнее здесь: https://stackoverflow.com/questions/794 ... l-either-f
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»