O entendimento destes
recursos é útil no desenvolvimento de aplicações Android, sendo essencial para
aqueles que estão iniciando seus trabalhos nessa plataforma.
Autores: Ricardo Ogliari e Robison Cris Brito
Para os programadores de diferentes linguagens e plataformas, é usual o uso de ferramentas que auxiliam e agilizam o processo de desenvolvimento. Dentre eles, pode-se citar editores de código fonte, compiladores, ferramentas de construção de interfaces gráficas, gerador de pacote de instalação, ferramenta de debug, refatoração e repositórios.
O uso de todas estas ferramentas individualmente causaria um trabalho enorme. Para isso, existem os ambientes de desenvolvimento, também conhecidos como IDE (Integrated Development Environment), que agregam esse arsenal em um único software.
Atualmente, no mundo de desenvolvimento Android, existem dois ambientes de desenvolvimento líderes de mercado. O ADT Bundle, que é um arquivo compactado e possui uma IDE Eclipse customizada e o Android SDK (além da junção deste último com o Android Studio, mais recente e criado baseando-se na InteliJ).
Pode-se dizer que no momento da escrita deste artigo as duas se dividem na escolha dos desenvolvedores, com um crescimento do Android Studio.
O ADT Bundle trabalha com uma versão customizada da IDE (Integrated Development Environment) Eclipse. Assim como outras ferramentas que visam auxiliar o processo de desenvolvimento, neste caso, é possível criar um novo projeto Android em questão de segundos com a ajuda de telas especiais que orientam passo a passo no projeto, chamadas de Wizards.
Ao gerar o projeto, tem-se um código introdutório que serve como esqueleto de uma aplicação básica com somente uma tela. Seria como o conhecido Hello World que todo desenvolvedor aprende ao estudar uma nova linguagem de programação.
Além disso, este pequeno pedaço de código também já segue as boas práticas norteadas pelo próprio Google, forçando o início correto no processo de aprendizado.
Para os usuário do ADT Bundle, foi notada uma considerável diferença que aconteceu recentemente. Ao criar qualquer projeto no Eclipse, o HelloWorld gerado não é mais tão simples como era anteriormente. Para o leitor ter uma noção mais clara desse fato, observe as Listagens 1 e 2. Na primeira temos o formato mais antigo, e na última, o mais recente.
Ao longo deste artigo, entenderemos mais a fundo estas diferenças que passam justamente pelos conceitos de ActionBarActivity e Fragments.
Listagem 1: Formato antigo do HelloWorld
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
Além de somente uma classe representando a única Activity do projeto, o desenvolvedor recebia somente um arquivo xml de interface localizado em res->layout, chamado de activity_main.xml. Na versão mais recente, além de um código mais complexo, o desenvolvedor também se depara com dois arquivos na pasta res->layout, o activity_main.xml e o fragment_main.
Com isso, obtem-se algumas vantagens e desvantagens, dependendo do nível de maturidade do desenvolvedor. Para profissionais experientes na plataforma, é uma mudança quase imperceptível, pois os conceitos de ActionBar e Fragments são conhecidos.
Para iniciantes, existe o problema da obrigação de já se conhecer estes termos que anteriormente poderiam ser estudados em um segundo momento. Entretanto, existe o benefício de já se começar a desenvolver para a plataforma seguindo as melhores práticas.
Listagem 2: Formato novo do HelloWorld
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(Me ...