Recentemente, descobri que o AndroidStudio me lembra de remover um elenco de classe. Lembro que, nos velhos tempos, precisamos lançar o resultado de findViewById, mas agora não é necessário.
O resultado de findViewById ainda é View, então quero saber por que não precisamos transmitir a classe?
Não consigo encontrar nenhum documento mencionado, alguém pode encontrar algum documento?
android
casting
findviewbyid
Eric Zhao
fonte
fonte
<T extends View> T findViewById(int id)
?Respostas:
A partir da API 26,
findViewById
usa inferência para seu tipo de retorno, para que você não precise mais transmitir.Antiga definição:
Nova definição:
Então, se você
compileSdk
tem pelo menos 26 anos, significa que você pode fazer uso disso :)fonte
ClassCastException
.De acordo com este artigo :
fonte
Nas versões mais antigas:
No Android Studio 3.0 com SDK 26:
fonte
O Android Studio lembra a remoção da transmissão, se você usar atributos comuns da classe View , como visibilidade ou alguns métodos comuns, como onClick ()
Por exemplo:
Nesse caso, você pode simplesmente escrever:
fonte
Android 0, limpar elenco
Uma das coisas que o Google anuncia no IO 2017 é algo chamado 'rejeitar' :). O desenvolvedor do Android não precisa fazer uma transmissão manual para findViewById (). Por exemplo, a maneira antiga de obter uma exibição de texto usando findViewById () seria algo como isto.
Enquanto o novo caminho seria assim
É uma simples mudança. Mas para um programador experiente, um código limpo como esse pode deixá-lo muito feliz e ajuda no seu humor de codificação :)
Para poder fazer isso, você só precisava definir a versão sdk compilada do projeto para a versão 26 em seu aplicativo build.gradle.
Você ainda pode segmentar a versão anterior do sdk também, por isso é uma alteração não intrusiva.
Agora, o verdadeiro problema, como você limpa esse código antigo que usa a conversão o tempo todo. Especialmente quando você tem centenas de arquivos de atividade. Você pode fazê-lo manualmente, ou talvez contrate um estagiário para fazê-lo 😛. Mas, felizmente, para todos os estagiários, o Android Studio já está preparado para nos ajudar com isso.
Quando você coloca o cursor (ou clica na transmissão redundante), o Android Studio sugere 2 opções para lidar com a transmissão redundante.
Primeiro, ele sugerirá remover essa conversão redundante ou você pode selecionar o código de limpeza. Ele removerá toda a conversão redundante para esse arquivo. Isso é melhor, mas queremos mais. Não queremos abrir cada arquivo e limpar isso um por um.
Uma das coisas que tornam o IntelliJ ideal é o recurso que é chamado de ação intencional. Tudo o que você precisa fazer é pressionar ctrl + shift + A e depois digitar clean. E selecione Ação de limpeza de código e selecione todo o escopo do projeto. Com essas etapas simples, seu código ficará muito mais limpo.
Um ponto importante é que você faz isso com algum sistema de versão de código. Dessa forma, você pode comparar as alterações que estão sendo feitas pela ação de intenção e reverter os arquivos que desejar.
Copiado da postagem original:
https://medium.com/@abangkis/android-0-clean-up-casting-c30acec56cef
fonte
why
, nãohow
:The result of findViewById is still View, so i want to know why we don't need to cast the class?
No código fonte de
ViewGroup
, há uma conversão do argumento de retorno. Portanto, não há necessidade de transmitir novamente:fonte