У меня есть класс, который нужно включить во многие мои действия, поэтому я создал класс, которому нужно получить доступ к представлению. это мой код:
class Toolbar{
private lateinit var typeface:Typeface;
private lateinit var context:Context
private lateinit var tvToolbar:TextView;
fun MakeToolbar(context:Context, title:String){
this.context=context
init();
}
private fun init() {
typeface= Func.getTypeFace(context)!!
tvToolbar=((Activity)context).findViewById
}
проблема в том, что в java я могу легко получить доступ к контексту и использовать findViewById, чтобы получить свое представление. Купить, я не могу сделать это в kotlin, и он не смог найти представление.
Как я могу получить доступ к представлению в классе без активности?
Я просто хочу сказать, что вы очень плохо написали этот класс... Я не знаю, может быть, вам следует спросить или прочитать о kotlin больше... Я могу написать вам, как это должно выглядеть, но это не связано с вашим вопросом
tvToolbar=((Activity)context).findViewById действительно ваш код? Если на то пошло, он не будет компилироваться в Kotlin или Java.
Синтаксически правильный способ будет таким:
tvToolbar = (context as Activity).findViewById(R.id.tvToolbar)
Хотя я рекомендую не передавать весь ваш объект активности другому классу. Почему бы вам просто не передать ссылку на ваше представление? И обязательно прочитайте про Слабые ссылки.
спасибо за ваш ответ, это решает мою проблему, но вопрос, этот класс может содержать до 5 представлений, лучше ли передать представление из контекста или получить ссылку из контекста?
Это действительно зависит, но, как правило, старайтесь избегать передачи объектов Context и View за пределы вашей активности или фрагмента. Он склонен к MemoryLeak. Вам следует попробовать подход MVP или MVVM.
@HamedMomeni Могу я поговорить с вами наедине, пожалуйста?
Между java и kotlin нет большой разницы. Вы используете Котлин вот так (контекст как? Активность)?. findViewById(R.id....) Я быстро написал это только по памяти, может быть с некоторой ошибкой... так что на самом деле это то же самое, если эта активность имеет представление во время вызова, она вернет то же самое, что и в java-коде....