Можно ли программно включить конкретный макет с Kotlin Android Extension? - PullRequest
0 голосов
/ 23 января 2019

Допустим, у меня есть два макета activity_home_1 и activity_home_2 для моего HomeActivity. Я хочу иметь возможность переключаться между ними, как я делал в Java:

int layout = getResources().getIdentifier("activity_home_" + getHomeScreenNumber(),"layout",getPackageName());
setContentView(layout);

А позже ссылочные элементы моего макета, используя findViewById();

Конечно, все элементы в этих двух макетах названы одинаково, они просто выглядят по-разному, поэтому в Java это прекрасно работает.


С другой стороны в Kotlin я избегаю findViewById(), и я использую Kotlin Android Extensions , и он прекрасно работает с включением одного макета, подобного этому:

import kotlinx.android.synthetic.main.activity_home_1.*

Беда в том, что я хочу переключаться между ними. Простое добавление другого импорта для другого макета приводит к ошибке, потому что он не знает, на какой макет смотреть (потому что у них обоих одинаковые поля).

Как переключаться между двумя макетами при использовании Kotlin Android Extensions ?

1 Ответ

0 голосов
/ 30 января 2019

Ответ был прост, и я не обращал достаточно внимания. Нужно было включить нужный макет с помощью:

setContentView(..)

Например, если вы включите

  • import kotlinx.android.synthetic.main.activity_home_1.*

и в вашем OnCreate() установите

  • setContentView(R.layout.activity_home_3)

Теперь будет отображен ваш макет activity_home_3 и ссылки на его элементы!

Нет необходимости для findViewById ()

...