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:
Conteúdo
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.
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 AppCompatActivit
y classe de onCreate
método.
o AppCompatActivity
classe de onCreat
e 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!