Índice:
Vídeo: Como aprender a programar 2024
Quando você inicia um novo projeto Java, o Android Studio oferece para criar uma atividade para seu projeto. O Android Studio oferece diversos tipos de atividades, como uma atividade básica, uma atividade vazia, uma atividade de login e assim por diante. Se você pedir uma atividade vazia, você obtém esse código:
pacote com. seu código. a10_11;
importar o Android. Apoio, suporte. v7. aplicativo. AppCompatActivity;
importar o Android. os. Agrupar;
classe pública MainActivity estende AppCompatActivity {
@Override
protected void onCreate (Bundle savedInstanceState) {
super. onCreate (savedInstanceState);
setContentView (layout R. activity_main);
}
}
O código declara uma classe chamada
MainActivity
. Este nome
MainActivity
não faz parte da biblioteca da API do Android. É um nome que você faz quando cria um novo projeto Android. (Na verdade, o Android Studio compõe o nome. Você aceita o nome ou alterá-lo para outro nome quando seguir as etapas para criar um novo projeto.)
A classe
MainActivity
estende uma classe que pertence para a biblioteca SDK do Android, ou seja, a classe
AppCompatActivity
. Em outras palavras, o objeto
MainActivity
é um objeto
AppCompatActivity
. O
MainActivity
objeto tem todos os direitos e responsabilidades que qualquer instância
AppCompatActivity
tenha. Por exemplo, o
MainActivity
possui um método
onCreate
, que substitui.
Na verdade, a classe
MainActivity
herda cerca de 460 linhas de código da classe
AppCompatActivity
do Android, que herda cerca de 1 000 linhas do Android
FragmentActivity
, que herda cerca de 6, 700 linhas da classe de atividade do Android. Os métodos herdados incluem aqueles como
getCallingActivity
,
getCallingPackage
,
getParent
,
getTitle
,
getTitleColor
,
getWindow
,
onBackPressed
,
onKeyDown
,
onKeyLongPress
,
onLowMemory
,
onMenuItemSelected
,
setTitle <,
setTitleColor
,
startActivity
, concluir e muitos, muitos outros. Você herda toda essa funcionalidade com duas palavras simples: estende
AppCompatActivity
.
Na terminologia das relações familiares, sua classe
MainActivity
é descendente da classe
Actividade
do Android. Sua classe
MainActivity
é um tipo de
Atividade
.
Esta imagem, tirada diretamente da documentação on-line do Android, resume esta informação sobre a classe
AppCompatActivity
.
Uma árvore de família AppCompatActivity.
Além de ser uma subclasse, a classe
AppCompatActivity
implementa um grupo de interfaces, incluindo a interface
AppCompatCallback
, a interface
TaskStackBuilder
e outras. Você não precisa se lembrar disso. Se você precisar saber, você pode procurá-lo na página de documentação do Android.
Super palavra-chave de Java, revisitada
A palavra
super
representa o construtor da superclasse. O código diferente usou a palavra-chave
super
de maneiras diferentes. Sim,
super
sempre tem algo a ver com a classe pai de uma classe. Mas, não,
super
nem sempre se refere ao construtor da classe pai.
Em um método
onCreate
, a chamada
super. onCreate (savedInstanceState)
envia
savedInstanceState
ao método
onCreate
da classe pai. A classe pai é a classe
AppCompatActivity
. Então, Java chama o método
AppCompatActivit
y
da classe emCreate
.
O método
AppCompatActivity
classe
onCreat
e contém sua própria chamada para
super. onCreate (saveInstanceState)
. O
AppCompatActivity
classe da classe é a classe
FragmentActivity
. Então, Java passa
savedInstanceState
para o método
FragmentActivity
classe
onCreate
. E assim por diante.
Não é até chegar à
Actividade
- o M
ainActivity
bisavô da classe - que o código usa diretamente a variável
saveInstanceState
. A partir desta informação
saveInstanceState
, o código coloca a atividade de volta como era antes que o sistema a destruísse.
Casting, novamente
Quando você chama
findViewById
, o Java não sabe qual o tipo de exibição que encontrará. O método
FindViewById
sempre retorna uma instância
View
, mas muitas classes do Android estendem a classe
View
. Por exemplo, as classes
Botão
,
TextView
,
ImageView
,
CheckBox
,
Cronômetro
e
ClassificaçãoBar
todos estendem a classe
Ver
do Android. Se você digitar o seguinte código:
// NÃO FAÇA ESTE! !
TextView textView;
textView = findViewById (R. Id. TextView);
Java solta um rugido ressonante e ressentido: "Como você se atreve a assumir que o objeto retornado por uma chamada para
findViewById
refere-se a uma instância da classe
TextView
! "(Na verdade, o Java exibe silenciosamente e mecanicamente uma mensagem de erro
incompatibilidade de tipos no editor do Android Studio.) Limitar
significa tentar atribuir um valor longo
a um > int
valor. Um valor
longo
tem 64 bits e um valor
int
tem apenas 32 bits. Portanto, a tentativa de estreitamento falha. No código que você encontra aqui, a chamada
findViewById
incorreta é outra tentativa de redução - atribuindo o valor
Exibir
retornado por uma chamada de método para uma variável
TextView
.A classe
TextView
é uma subclasse da classe
Ver
, portanto a atribuição falha miseravelmente.
apaziguar os deuses de Java, adicionando um operador de elenco ao código. Você diz ao Java que converta o que quer sair da chamada do método
findViewById
para um objeto
TextView
.
textView =
(TextView)
findViewById (R. Id. TextView1); Enquanto você está digitando o código, o Java humora você e diz: "O seu operador de seleção mostra que você está ciente da diferença entre um TextView
e qualquer Vista
anterior
. Eu farei o meu melhor para interpretar o objeto
Exibir
que eu encontro no tempo de execução como um objeto
TextView
. "(Na verdade, enquanto você está digitando o código, Java não diz nada. O fato de Java não exibir mensagens de erro quando você usa esse truque de elenco é um bom sinal. O recurso de lançamento de Java economiza o dia!)
Casting impede que você veja uma mensagem de erro enquanto desenvolve seu código. Desta forma, lançar é uma característica bastante útil do Java. Mas o lançamento não pode salvá-lo se seu código contiver erros de tempo de execução. Quando você digita
textView = (TextView) findViewById (R. Id. TextView1);
você verifica se o nome
textView
representa um widget
TextView
. Quando o aplicativo é executado, Java pega o
R. identidade. Widget textView
a partir do
activity_main. xml
, e tudo funciona bem. Mas às vezes você pode esquecer de verificar o seu
R. java
nomes contra os componentes no arquivo XML. Uma chamada para
findViewById
esconde surpreendentemente um componente
Botão
quando o seu elenco diz a Java que espera um widget
TextView
. Quando isso acontece, o Java chokes no operador de transmissão e seu aplicativo falha durante sua execução. De volta ao quadro de desenho!