Подтвердить что ты не робот

Не нужно бросать результат findViewById?

Недавно я обнаружил, что AndroidStudio напоминает мне, чтобы удалить класс. Я помню, что в прежние времена мы должны были отобрать результат findViewById, но теперь это не обязательно.

Результат findViewById по-прежнему является View, поэтому я хочу знать, почему нам не нужно бросать класс?

Я не могу найти какие-либо документы, упомянутые, может ли кто-нибудь найти какой-либо документ?

4b9b3361

Ответ 1

Начиная с API 26, findViewById использует вывод для возвращаемого типа, поэтому вам больше не нужно делать.

Старое определение:

View findViewById(int id)

Новое определение:

<T extends View> T findViewById(int id)

Так что если ваш compileSdk не менее 26, это означает, что вы можете использовать это :)

Ответ 2

Согласно этой статье:

Следующая функция основана на выводе автоматического типа Javas generics, чтобы исключить необходимость ручного литья:

protected <T extends View> T findViewById(@IdRes int id) {
    return (T) getRootView().findViewById(id);
}

Ответ 3

В более старых версиях:

AutoCompleteTextView name = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView);

От Android Studio 3.0 с SDK 26:

AutoCompleteTextView name = findViewById(R.id.autoCompleteTextView);

Ответ 4

Android Studio напоминает удалить кастинг, если вы используете общие атрибуты из класса Вид, например видимость или некоторые распространенные методы, такие как onClick()

Например:

((ImageView) findViewById(R.id.image_car)).setVisibility(View.VISIBLE);

В этом случае вы можете просто написать:

findViewById(R.id.image_car).setVisibility(View.VISIBLE);

Ответ 5

Android 0, очистить кастинг

Одна из вещей, которую Google объявляет в IO 2017, - это то, что называется "выбрасывать" :). Разработчик Android не должен выполнять кастинг вручную для findViewById(). Например, старый способ получить текстовое представление с помощью findViewById() будет выглядеть примерно так.

TextView txtDesc = (TextView) findViewById(R.id.textViewDesc);
txtDesc.setText(getString(R.string.info_angkot_description));

Пока новый путь будет таким

TextView txtDesc = findViewById(R.id.textViewDesc);
txtDesc.setText(getString(R.string.info_angkot_description));

Это простое изменение. Но для опытного программиста чистый код, подобный этому, может сделать вас очень счастливым, и это поможет вам настроиться программировать :)

Чтобы сделать это, вам нужно было только установить версию скомпилированного SDK вашего проекта на версию 26 в вашем build.gradle приложения.

Вы все еще можете использовать более раннюю версию SDK, так что это не навязчивые изменения.

Теперь реальная проблема, как вы очищаете тот старый код, который использует приведение все это время. Особенно, когда у вас есть как сотни файлов деятельности. Вы можете сделать это вручную, или, возможно, нанять стажера, чтобы сделать это 😛. Но, к счастью для всех этих интернов, андроид студия уже готова помочь нам в этом.

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

Сначала будет предложено удалить это избыточное приведение, или вы можете выбрать очистить код. Это удалит все лишние преобразования для этого файла. Это лучше, но мы хотим большего. Мы не хотим открывать каждый файл и очищать его один за другим.

Особенностью идеи IntelliJ является то, что эта функция называется намеренным действием. Все, что вам нужно сделать, это нажать Ctrl + Shift + A, а затем набрать clean. И выберите "Очистка кода", и выберите весь объем проекта. С помощью этих нескольких простых шагов ваш код станет намного чище.

Одним из важных моментов является то, что вы делаете это с некоторой системой управления версиями кода. Таким образом, вы можете сравнить изменения, внесенные действием намерения, и отменить любые файлы, которые вы хотите.

Скопировано из оригинального поста:

https://medium.com/@abangkis/android-0-clean-up-casting-c30acec56cef