Programação com java: algumas observações sobre as classes do android

Quando você iniciar um novo projeto Java, Estúdio Android oferece para criar uma atividade para seu projeto. Estúdio Android oferece-lhe vários tipos de atividades, como uma atividade básica, uma Atividade vazio, uma atividade de login, e assim por diante. Se você perguntar para uma Atividade vazio, você recebe este código:

com.allyourcode.a10_11- pacote

importação android.support.v7.app.AppCompatActivity-

importação android.os.Bundle-

classe pública MainActivity estende AppCompatActivity {

@Sobrepor

protected void onCreate (Bundle savedInstanceState) {

super.onCreate (savedInstanceState) -

setContentView (R.layout.activity_main) -

}

}

O código declara uma classe chamada Atividade principal. Este nome Atividade principal não é parte da biblioteca API Android. É um nome que você faz quando você criar um novo projeto Android. (Na verdade, Estúdio Android torna-se o nome. Você aceita o nome ou alterá-lo para algum outro nome quando você seguir os passos para criar um novo projeto.)

o Atividade principal classe estende uma classe que pertence a biblioteca SDK do Android, ou seja, a AppCompatActivity classe. Em outras palavras, o Atividade principal objeto é um AppCompatActivity objeto. o Atividade principal objeto tem todos os direitos e responsabilidades que qualquer AppCompatActivity exemplo tem. Por exemplo, a Atividade principal tem uma onCreate método, que ele substitui.

Na verdade, a Atividade principal classe herda cerca de 460 linhas de código do Android de AppCompatActivity classe, que herda cerca de 1.000 linhas de Android do FragmentActivity classe, que herda cerca de 6.700 linhas de classe Atividade do Android. Os métodos herdados incluem aqueles tais como getCallingActivity, getCallingPackage, getParent, getTitle, getTitleColor, GetWindow, onBackPressed, onkeydown, onKeyLongPress, onLowMemory, onMenuItemSelected, setTitle, setTitleColor, startActivity, acabamento, e muitos, muitos outros. Você herda toda esta funcionalidade com duas palavras simples: estende-se AppCompatActivity.

Video: 8.21 Interface in Java Tutorial with Example

Na terminologia de relações familiares, o seu Atividade principal classe é um descendente de Android do Atividade classe. Seu Atividade principal classe é um tipo de Atividade.

Esta imagem, tirada directamente à documentação on-line do Android, resume esta informação sobre o AppCompatActivity classe.

java-programming-for-android-developers-2e-appcompatactivity
Uma árvore de família AppCompatActivity.


Marque a página para fácil acesso a documentação da biblioteca API do Android.

Além de ser uma subclasse, a AppCompatActivity classe implementa um monte de interfaces, incluindo a AppCompatCallback interface, o TaskStackBuilder interface, e outros. Você não tem que se lembrar de nada disso. Se você sempre precisa saber, você pode procurá-lo na página de documentação do Android.

super-chave de Java, revisitado

A palavra super significa construtor da superclasse. código diferente usou o super palavra-chave de maneiras diferentes. Sim, super sempre tem algo a ver com a classe pai de uma classe. Mas não, super nem sempre se referem ao construtor da classe pai.

em um onCreate método, a chamada super.onCreate (savedInstanceState) envia savedInstanceState a da classe pai onCreate método. A classe pai é o AppCompatActivity classe. Assim Java chama o AppCompatActivity classe de onCreate método.

o AppCompatActivityclasse de onCreate método contém a sua própria chamada para super.onCreate (savedInstanceState). o AppCompatActivity mãe da classe é o FragmentActivity classe. Então, Java passa savedInstanceState ao FragmentActivity classe de onCreate método. E assim por diante.

Não é até chegar ao Atividade classe - o MainActivity bisavô de classe - que o código faz uso direto do savedInstanceState variável. disto savedInstanceState informações, o código coloca a atividade de volta do jeito que era antes que o sistema a destruiu.

Fundição, mais uma vez

Quando você chama findViewById, Java não sabe o tipo de visão que vai encontrar. o findViewById método sempre retorna um Visão exemplo, mas muitas aulas do Android estender o Visão classe. Por exemplo, as classes Botão, TextView, ImageView, CheckBox, Cronômetro, e RatingBar tudo estender Android do Visão classe. Se você digitar o seguinte código:

// NÃO FAÇA ISSO !!

TextView textView-

textView = findViewById (R.id.textView) -

Java deixa escapar um sonoro rugido ressentido: “Como você se atreve a assumir que o objeto retornado por uma chamada para findViewById refere-se a um exemplo do TextView classe!”(Na verdade, Java calmamente e mecanicamente exibe uma Tipos incompatíveis mensagem de erro no editor do Android Studio.)

estreitamento significa tentar atribuir um longo valor para um int valor. UMA longo valor tem 64 bits, e uma int valor tem apenas 32 bits de. Portanto, a tentativa de estreitamento falha. No código que você encontra aqui, o mau findViewById chamada é mais uma tentativa de fazer estreitamento - atribuindo o Visão valor retornado por uma chamada de método para um TextView variável. o TextView classe é uma subclasse da Visão classe, para a atribuição falha miseravelmente.

apaziguar os deuses Java, adicionando um operador de conversão ao código. Você diz Java para converter o que aparece fora do findViewById chamada de método em um TextView objeto.

textView = (TextView) findViewById (R.id.textView1) -

Enquanto você está digitando o código, Java humores você e diz: “O seu operador de elenco me mostra que você está ciente da diferença entre um TextView e de qualquer idade Visão. Vou fazer o meu melhor para interpretar a Visão objeto que eu encontrar em tempo de execução como um TextView objeto “. (Na verdade, enquanto você está digitando o código, Java não diz nada. O fato de que Java não exibir quaisquer mensagens de erro quando você usar esse truque de fundição é um bom sinal. recurso de fundição de Java salva o dia!)

Fundição impede de ver uma mensagem de erro quando você desenvolver seu código. Dessa forma, a carcaça é bastante um recurso útil de Java. Mas fundição não pode salvá-lo se seu código contém erros de execução. Quando você digita

textView = (TextView) findViewById (R.id.textView1) -

Video: Programação Android - s01e07 - Elementos básicos de um projeto no Android Studio

você verificar que o nome textView representa um TextView ferramenta. Quando o aplicativo é executado, Java agarra a R.id.textView widget da activity_main.xml arquivo, e tudo funciona muito bem. Mas às vezes você pode esquecer de verificar o seu R.java nomes contra os componentes no arquivo XML. Uma chamada para findViewById surpreendentemente cospe um Botão componente quando seu elenco diz Java para esperar uma TextView ferramenta. Quando isso acontece, Java engasga com o operador de conversão e seu aplicativo trava durante a sua execução. Voltar à prancheta de desenho!


Publicações relacionadas