Переименование ID элемента макета не приводит к переименованию ссылки viewBinding - PullRequest
0 голосов
/ 06 мая 2020

Допустим, у меня есть макет с именем activity_main. xml и в нем есть элемент:

<TextView
    android:id="@+id/text_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

Activity с именем MainActivity. java. В его методе onCreate я раздуваю вышеуказанный макет с помощью viewBinding и устанавливаю текст текстового представления:

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    ActivityMainBinding binding = ActivityMainBinding.inflate(getLayoutInflater());
    setContentView(binding.getRoot());

    binding.textView.setText("some text");
}

Теперь, если я переименую идентификатор TextView в activity_main. xml, нажав Shift+F6 на что-то вроде @+id/text_view_new, тогда ссылка в onCreate не изменится с binding.textView.setText("some text"); на binding.textViewNew.setText("some text");

Является ли такое поведение ограничением или ошибкой или я что то не так делаю ?

1 Ответ

0 голосов
/ 06 мая 2020

Это ограничение, ошибка или я что-то делаю не так?

Мои мысли о:

  • Вы делает все как положено
  • Я думаю, что это не ошибка или ограничение, а просто принцип работы. Конечно, кто-то может ожидать magi c и изменить ваш «textView» на «textViewNew» в действии, и кто-то может сказать, что это ограничение. Важно понимать, как работает View Binding и может ли он делать такое c или нет.

Механизм View Binding генерирует дополнительные Java Binding-классы. Так вот в процессе сборки там произошло волшебство c - был сгенерирован класс ActivityMainBinding, в него было помещено publi c поле «textView». После получения экземпляра этого класса вы можете написать просто «binding.textView».

Но после переименования «id» в xml было бы не очень разумно изменять этот автоматически сгенерированный класс (и это действие необходимо выполнить, если вы хотите заменить «textView» на «textViewNew») . Поэтому это изменение ни на что не влияет в коде

...