MENU It's me: Mário!

Aula 5

Aula 5: Como criar a User Interface (UI) do meu Aplicativo Android?

Curso de Android 04 de maio de 2015 65 comentários
Curso de Android
  • 04 - 05 - 15
  •        
  • 65

Veja todas as aulas aqui.

E ae galera! Dessa vez vamos direto para a aula, ok?

O que é UI?

A resposta à essa pergunta é relativamente simples. A Interface do Usuário (ou User Interface, ou ainda UI) é o espaço de interação entre o homem e a máquina.

No nosso caso, é o conjunto de elementos que formam o que você vê na tela do seu dispositivo móvel. É tudo com o que o usuário pode interagir com o seu aplicativo.

Por onde começar?

Bem… nossa base é a documentação do Android então podem tomá-la como referência, mas usaremos a metodologia que a Udacity usa nos cursos dela: a prática. E isso é óbvio, afinal foi o que prometi na nossa primeira aula, certo? :D

O código do nosso projeto

Lembra que vamos construir o Reader até o final do Curso? Então… Como comentamos na Aula 3, todo o processo será versionado no repositório do aplicativo e você pode conferir que teremos branches para cada Aula (com o código exatamente do App ao final dela).

Então, se você vai acompanhar a Aula 5 com a gente e quer ter os arquivos iguais ao que eu tenho aqui (antes da aula começar), basta clonar o repositório e o branch “Aula-3-Como-criar-um-projeto-no-Android-Studio” vai ter o que você quer.

Lauching!

Você deve ter percebido que nosso aplicativo só exibe “Hello World!” até agora, certo?

Isso acontece porque a MainActivity é lançada no início do aplicativo (não sei se há uma boa prática que dita isso, mas considero bem semântico, senão padrão, que tudo se inicie nela). De qualquer forma, isso ocorre porque no Manifesto temos o seguinte:

<activity
    android:name=".MainActivity"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

Veja o atributo android:name em action no intent-filter: android.intent.action.MAIN

Isso faz com que essa Activity seja o ponto de entrada da Aplicação. Estudaremos mais sobre os Intents (e consequentemente sobre os seus filtros) numa próxima aula. Por enquanto, é legal entender o que já temos.

Placeholder Fragment

Descendo no código da MainActivity encontramos o PlaceholderFragment que estende a classe Fragment. (Caso você não ache, dê uma lida na atualização no final do post).

Isso tudo foi gerado pelo Android Studio, mas falamos um pouco disso na aula passada, lembra? Se não lembra, dá uma revisada ;)

Por enquanto, é importante saber que é nesse fragmento que nosso arquivo de layout, ou seja, o arquivo que contem nossa UI está sendo chamado no método onCreateView:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_main, container, false);
    return rootView;
}

Como pode ver, o método onCreateView é o responsável por inflar o layout na nossa View. E nosso layout, está no arquivo fragment_main.xml, que pode ser chamado pela class R da seguinte forma: R.layout.fragment_main.

Está com dúvida ou não sabe o que eu quis dizer nesse último parágrafo? Melhor parar agora e ler o artigo, que eu escrevi para o Tableless, sobre os resources num projeto Android. Vale a pena.

Resumindo: ao iniciar o aplicativo, a MainActivity é lançada e o PlaceholderFrament é criado, inflando nosso arquivo XML de layout, convertendo tudo o que temos lá para uma hierarquia de elementos da View.

fragment_main.xml

Se você segurar o Ctrl (ou CMD) e clicar em fragment_main ou se navegar até o arquivo na estrutura do Projeto (árvore à esquerda), você vai chegar ao arquivo fragment_main.xml, que é o responsável pela nossa UI:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".MainActivity$PlaceholderFragment">

    <TextView
        android:text="@string/hello_world"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>
fragment_main.xml no Android Studio
fragment_main.xml no Android Studio

Se você olhar com atenção, vai notar uma hierarquia de elementos (front-ends piram na semelhança): o elemento de texto (TextView), que contem o texto “Hello World” que vimos no nosso App está contida dentro de um elemento-pai. E isso ocorre com toda a UI no Android, quer ver?

View e ViewGroup

Antes de continuar no Android Studio, vamos entender como funciona a montagem da Interface.

Como indica a documentação do Android: cada elemento da Interface do Usuário é definido por uma hierarquia de objetos View e ViewGroup.

Exemplo de uma Hierarquia de uma View
Exemplo de uma Hierarquia de uma View

OK. Mas como colocar esses elementos no nosso layout? Bem… você pode fazer isso no código, mas a melhor, mais fácil e mais performática solução é usar um arquivo XML de layout. Eles devem estar dentro de subpastas /layout na pasta /res. Como sabem, podemos ter variações do nome dessa pasta, como por exemplo layout-land, mas deu pra entender, né? :D

Voltando ao código XML, você pode perceber que o elemento da View responsável por escrever o “Hello World” é o seguinte:

<TextView
    android:text="@string/hello_world"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

Isso nos ensina que todos os elementos da View no XML possuem o mesmo nome da classe que representam no código, sendo assim, o elemento representa uma widget de texto, ou TextView. Iremos estudar mais sobre como escrever esse layout XML na próxima aula.

Editando o Layout XML

Como eu disse, iremos estudar mais sobre como editar os layouts XML, mas por enquanto, podemos brincar um pouco com nossa Interface indo no Android Studio (com o arquivo XML aberto, claro) e clicando na aba Design:

Dica: clique na aba 1: Project na lateral superior esquerda para fechar e abrir.

Aba Design no Android Studio
Aba Design no Android Studio

Nessa tela temos 4 áreas. Vamos ver como funciona cada uma delas:

Palette

É a lista de elementos da View.
São organizados em pastas/grupos (clique para esconder ou mostrar os elementos dela). Você pode colocar o mouse sobre qualquer dos elementos para ler uma breve descrição sobre ele e arrastá-lo para a tela do dispositivo, caso queira inseri-lo no layout.

Palette

Previsão do Dispositivo

É onde você monta seu layout.
Aqui você tem uma previsão do seu layout, pode também alterar a orientação do dispositivo e trocar de dispositivo, caso queira testá-lo em uma tela maior, por exemplo.

Preview

Árvore de Componentes

Mostra a hierarquia da sua UI.
Lembra que falamos que a UI é representada por uma hierarquia de Views e ViewGroups? Então… aqui está ela de um jeito bem natural para a gente: em árvore.

Component Tree

Propriedades

Lista as propriedades do elemento selecionado.
Se você clicar em um elemento na Previsão do Dispositivo ou então na Árvore de Componentes, esse espaço mostrará as propriedades desse elemento e você poderá alterá-las como quiser.

Properties

Experimente criar seu próprio layout com os vários elementos disponíveis e depois testá-lo no seu celular!

ListView

Agora que já sabemos como funciona a criação da nossa User Interface, vamos conhecer um elemento chamado ListView.

listview

ListView é um ViewGroup que mostra uma lista de elementos, que são automaticamente inseridos nela por um Adapter (adaptador), que pega os dados de uma fonte (uma array ou uma consulta ao banco de dados, por exemplo) e converte cada resultado em uma View.

Voltando ao nosso Projeto

Hoje iremos criar na nossa MainActivity uma lista de elementos. Isso serve de base para qualquer lista que você queira fazer e servirá de base para nossa listagem de últimos posts, então bastante atenção!

1° Passo: Adicione a ListView no Layout

Vá até o arquivo fragment_main.xml, retire tudo e coloque o código abaixo nele (numa próxima aula, iremos entender o motivo de usar FrameLayout e não o RelativeLayout que veio por padrão):

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity$PlaceholderFragment">

    <ListView
        android:id="@+id/list_last_posts"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></ListView>

</FrameLayout>

Outra forma de fazer isso é ir na aba Design, clicar nos elementos e pressionar “delete” para apagá-los. Após isso, arraste um Frame Layout e um ListView para o dispositivo e em Properties altere “layout_width” e “layout_height” para “match_parent”, em cada um deles.

layout_width e layout_height são as propriedades para largura e altura respectivamente. Já o valor match_parent significa que esse elemento irá se expandir até o tamanho do elemento pai, que também possui esse valor para essas propriedades, ou seja, ele possui o tamanho do pai dele, que segundo a Árvore de Componentes é a tela (Device Screen).

2° Passo: Criar o layout de cada item

Quando estivermos montando nosso Adapter, você vai notar que ele precisa de um parâmetro que é justamente um arquivo de layout, então vamos criá-lo agora.

Como você já deve saber, para criar um arquivo de layout devemos ir na guia 1: Project e clicar com o botão direito do mouse na pasta layout e no menu de contexto que aparecer clicar em New > Layout resource file.

Na janela que irá aparecer digite list_item_last_posts no campo File name e TextView no campo Root element.

3º Passo: Altere o layout de cada item

O sistema quase criou o arquivo do jeito que queremos nesse momento, mas vamos alterá-lo acrescentando um ID (android:id=”@+id/list_item_post_title”) para o TextView, além de outras propriedades. Certifique-se que no final ele esteja assim:

<?xml version="1.0" encoding="utf-8"?>

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingLeft="32dp"
    android:paddingRight="32dp"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:gravity="center_vertical"
    android:id="@+id/list_item_post_title_textview">

</TextView>

O atributo minHeight serve para indicarmos uma altura mínima (no caso, herdamos esse valor dos atributos do Android), gravity irá deixar esse texto centralizado em relação à vertical, já que a altura pode ser maior que o conteúdo e PaddingLeft e PaddingRight criam um padding (ou espaço) nas laterais de 32dp.

4º Passo: Código!

Com tudo pronto, precisamos agora criar o código que insere os elementos no nosso ListView.

Volte ao método onCreateView do PlaceholderFragment na nossa MainAcitivity (caso você não ache, dê uma lida na atualização no final do post). Ele deve ficar assim:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    // Criando uma array falsa de strings com os títulos das nossas Aulas
    String[] data = {
            "Aula 1: Getting Start!",
            "Aula 2: Como instalar o Android Studio?",
            "Aula 3: Como criar um projeto no Android Studio?",
            "Aula 4: O que é Activity e Fragment?",
            "Aula 5: Como criar a User Interface (UI) do meu Aplicativo Android?"
    };

    // Criando uma lista (ArrayList) com os dados criados acima
    List<String> listOfLastPosts = new ArrayList<String>(Arrays.asList(data));

    // Agora que já temos os dados, vamos criar um Adapter, no caso um ArrayAdapter
    ArrayAdapter<String> listOfLastPostsAdapter = new ArrayAdapter<String>(
            getActivity(), // O contexto atual
            R.layout.list_item_last_posts, // O arquivo de layout de cada item
            R.id.list_item_post_title_textview, // O ID do campo a ser preenchido
            listOfLastPosts // A fonte dos dados
    );

    // Inflamos o layout principal
    View rootView = inflater.inflate(R.layout.fragment_main, container, false);

    // Cria uma referência para a ListView
    ListView listView = (ListView) rootView.findViewById(R.id.list_last_posts);
    listView.setAdapter(listOfLastPostsAdapter);

    // Retornamos tudo
    return rootView;
}

4.5: Explicando o código

O código acima já possui comentários bem explicativos e caso você tenha dúvida, basta perguntar nos comentários, mas de qualquer forma, o que fizemos foi criar um Objeto String[] chamado “data” com uma lista de strings (os nomes das aulas) entre aspas duplas.

Após isso, criamos uma lista e jogamos “data” dentro dela. Com os dados, criamos o ArrayAdapter, inflamos a View (essa parte já estava lá antes), criamos uma referência para a ListView e setamos o Adapter para ela.

Por fim, retornamos a View.

5º Passo: Teste seu App

Coloque seu App para rodar e ele deve estar assim:

2015-05-04 02.41.23

Conclusão

Bem… com isso você já sabe bastante sobre como montar sua User Interface e até aprendeu a listar coisas! Próximas aulas veremos mais sobre como montar nosso arquivo XML e também noções de Responsive Design para Android. Mas calma… por enquanto, tente acrescentar itens à lista e mexer com outras propriedades das Views para ir se familiarizando e descobrindo coisa nova (essa é a melhor forma de aprender).

Você pode conferir o código final no nosso repositório e não se esqueça de comentar, compartilhar e mostrar para os amigos, para fazer um #dev feliz.

Obrigado e até a próxima!

Atualização

Galera, as novas versões do Android Studio estão criando dois arquivos: MainActivity.java e MainActivityFragment.java. Mas não se preocupem: a diferença é que agora a classe que estende a classe Fragmentment não vem mais no mesmo arquivo da classe que estende a Activity (ou similar, como a ActionBarActivity).

Então, quando procurarem pelo PlaceholderFragment (ou qualquer outra classe que estenda a classe Fragment), possivelmente irão achar no arquivo MainActivity, mas sim em outro arquivo.

Por favor, considere desativar o AdBlock

Não perca nenhuma novidade do nosso Curso!

Não se preoculpe, não enviaremos muitos e-mails, nem mostraremos seu e-mail para ninguém. Dúvidas?


Deixe seu comentário! Dúvida sobre como comentar
ou vai postar código? Leia antes.

  • Igor de Souza Reis

    OMG!

    Já usei o Android Studio muitas vezes, e sempre me deparo com esse erro. Então, resolvi desinstalar ele e o Java e recomeçar.

    Logo pesquisei sobre tutoriais com o Android Studio e achei seu sit e segui tudo desde a 1ª aula. Porém, como nas outras vezes quando escrevo o código caio sempre no mesmo erro (Can’t resolve symbol R): em partes do código que chamamos a classe R, como “R.id.list_item_post_title_textview”.[

    E eu já estou infezado por acontecer isso sempre. Heeeelp, please

    • Opa! Tudo bem?

      Fico feliz de que está acompanhando nossas aulas e sobre o seu problema, o que eu posso dizer é que a classe R é gerada pelo Gandle, então se o Android Studio não consegue resolver essa classe, provavelmente é problema na sincronização do Gadle. Você pode tentar resolver sincronizando o Gadle novamente indo em “Tools > Android > Sync Project with Gradle Files”.

      Tenta aí e me diz se resolveu! Abraços.

      • Ednaldo Miranda

        Olá,

        Estou com o mesmo problema e já fui em sync, clean e rebuild, mas não resolveu nada. Sabe dizer o que poderia ser nesse caso?

        Estou ansioso para começar a utilizar o Android Studio, mas estou emperrado por causa disso.

        • Bem… se a solução acima não funcionou, tenta “Build->Clean Project” e depois “Build > Rebuild Project”. Se não der certo, verifica se os arquivos XML de layout estão OK (pode ser que algum esteja corrompido). Encontrei em alguns lugares um pessoal tendo problema por ter importado a classe R do Android, então verifica se há um “import android.R” (se tiver, tira: o certo é “import package.R”, por exemplo: “import com.example.projeto.R”).

          Abração e boa sorte!

  • Guilherme Camarotto

    Show!! Continuo acompanhando e ansioso por mais aulas hehe!

    • Massa! Isso me deixa feliz.
      Em breve mais novidades!!! :D

  • Diego Silva

    Cara tem alguma apostila em português que possa me auxiliar, sou iniciante, e estou começando a desenvolver minha monografia para a Facull?

    • Cara, nem tenho.
      Aconselho você usar a documentação do Android e se precisar o curso da Udacity que eu coloquei o link nas aulas iniciais! Abraços.

  • Lucas Alencar

    Muito bom o seu tutorial, no aguardo para as próximas aulas !

  • Joabe Guimaraes Kachorroski

    Boa tarde, estou curtindo muito esse curso, eu gostaria de saber quando é que vai sair as proximas aulas.???

    • Opa! Que bom que está gostando!!!
      A ideia é sair uma aula por semana, mas as vezes fico muito cheio de trabalho e acabo levando mais de uma semana pra terminar a aula :(

  • Régis Nascimento

    Opa excelente as aulas, mais alguém teve problema com a previsão do dispositivo?
    Comigo está dando problema de renderização tanto na api22: M quanto na API22:5.1.1

    • Hey! Valeu pelo elogio!
      Sobre o lance da previsão do dispositivo, o que eu sei é que determinados elementos da view que não possuem forma fixa não podem ser pré-visualizados, como por exemplo um Fragment.

  • Josimar Souza

    Ola! Estou acompanhando as aulas e gostando muito, conteúdo bastante intuitivo. Parabéns pela iniciativa.
    Me deparei com um probleminha, ao executar o app a mensagem de infelizmente Reader parou surge na tela. O que pode ser?

    • Olá Josimar! Tudo bem?
      Cara… isso pode estar acontecendo por uma infinidade de problemas, mas na maioria das vezes que aconteceu foi algum “NullPoint Exception”. Dá uma olhada no log (parte de baixo do Android Studio) e tenta ver a linha do código que causou o erro (deve estar em vermelho).

      Mas me diz… dá uma conferida se digitou/copiou direitinho os códigos daqui da página ou se não está mudando o nome de alguma classe/arquivo. Pode ser que seja isso (um “a” no lugar errado já dá problema… hahahahaah mas é assim mesmo… normal).

      Abração!

  • Dalton Willians

    Olá! Gostei muito da explicação, mas queria uma dica pra um probleminha não sei se tem alguma aula a respeito. Então vamos ao problema, depois de finalizar o aplicativo tem como colocar uma tela inicial com uma logo e depois de uns 3 segundos aparecer os botões do app?

    • Olá, Dalton!

      Tem sim. Você precisa criar uma Activity com essa UI que vc quer (logo) e criar um temporizador para ir para a outra Activity (a primeira do seu app, provavelmente a MainActivity). Feito isso, vai no Manifesto q coloca essa Activity como “start”. É só procurar pela declaração da Activity que estava originalmente iniciando o App e trocar.
      Geralmente é o que tem em dentro de .

      https://github.com/mariovalney/reader/blob/Aula-5-Como-criar-a-User-Interface-(UI)-do-meu-Aplicativo-Android/app/src/main/AndroidManifest.xml

      • Dalton Willians

        Mário, muito obrigado cara!

        • Deu certo?

          • Dalton Willians

            Desculpa a demora, funcionou, muito obrigado. Mário me surgiu uma nova dúvida, na verdade foi um problema que apareceu no meu app que é composto de botões que emitem áudios quando clickados. Os botões estão emitindo simultaneamente quando teclo dois botões, gostaria de saber como deixar executando apenas um por vez, sou iniciante no Android Studio peço desculpa por uma dúvida tão simplória.

            • Olá, Dalton!
              Não se preocupe, todos temos dúvidas!

              Sobre o seu problema, não tenho muita familiaridade sobre como executar áudio com um botão (ainda não fiz nada do tipo), mas recomendo que dê uma procurada na documentação do método que você usou, pois provavelmente há algo para parar a execução.

              Minha sugestão é que ao pressionar um botão ele pare a execução de todos os botões antes de iniciar a própria.

              Abraços!

  • Olá, Mário. Muito bom seu curso gratuito. Obrigado por isso.
    Nesta aula 5 tive um problema na referência para a ListView. Mostra este erro e não roda o emulador. Pode me explicar o que pode ter ocorrido, por favor? Abaixo a linha e a linha de erro:

    ListView listView = (ListView) rootView.findViewById(R.id.list_last_posts);

    “Error:(93, 70) error: cannot find symbol variable list_last_posts

    • Olá, Marcelo!
      Obrigado por entrar em contato e fico feliz que esteja gostando do curso.

      Sobre o erro, verifica se você digitou o id da ListView direitinho lá no primeiro passo, pois a IDE não está conseguindo achar. Abraços.

      • Isabela Coimbra

        Olá Mário! tudo bem? Espero que sim. Estou gostando muito do curso e agradeço por esta oportunidade, está me ajudando muito.

        Nesta aula tive uma dificuldade também, bem parecida com a do Marcelo… Está dando erro e não consigo compilar o app. No código do passo 4 quando colei o código no MainActyvityFragment.java (no qual tem “onCreateView…”) as palavras “List”, “ArrayList”, “Arrays”, “ArrayAdapter”, “ListView”, “setAdapter”, ficam na cor vermelha (o erro, no caso, está nessas palavras). Não teria que “declarar” elas no MainActivityFragment ou importar algo?

        Aparecem essas linhas de erro:

        Error:(23, 55) error: unmappable character for encoding UTF-8
        Error:(28, 32) error: unmappable character for encoding UTF-8
        Error:(35, 23) error: unmappable character for encoding UTF-8
        Error:(46, 26) error: unmappable character for encoding UTF-8
        Error:(52, 6) error: reached end of file while parsing
        Error:Execution failed for task ‘:app:compileDebugJava’.
        > Compilation failed; see the compiler error output for details.

  • André Feliciano

    ótimo curso. Valeu

  • Wagner Martins

    Olá, Mário. Primeiramente quero parabenizá-lo pelo curso, é muito bom, sou iniciante e estou aprendendo muito.

    Estou com um problema MainActivityFragment.java; toda a string fica em vermelho e quando passo o mouse por cima aparece a msg:”unreachable statement” (declaração inacessível), como resolver?

    • Olá, Wagner! Tudo bem?

      Teria como subir o código para um GIST ou até no Github mesmo e mandar o link? Pelo que pesquisei, isso pode acontecer em um erro de loop infinito, mas não tenho certeza.

  • Mauricio alves de andrade

    Eu estou igual criança , já comecei vários projetos e ai acabo fazendo uma besteira, mas eu sou do grupo de pessoas que aprendem experimentando quebrando mesmo para entender…. até o momento os problemas que enfrentei consegui superar estou adorando o curso. durmo pouco agora com tanta ansiedade….. srsrs obrigado..

    • Opa! Tudo bem?
      Olha… se tem uma verdade nesse mundo é que ninguém consegue finalizar um projeto sem (um monte de) problemas… é normal um bug ou algum errinho, mas a graça está em superá-los, não acha?
      Obrigado por acompanhar o curso e espero que continuemos evoluindo o;/
      Abração!

  • Mauricio alves de andrade

    kkkkkkk nao sei como fiz mas nao escrevi codgo srsrs help??

  • Ana Prante

    Olá Mário, tudo bem?

    aparentemente todos estamos com o mesmo problema, entao posso estar sendo repetitiva. Mas enfim…

    Quando fiz o passo 4, ao escrever a linha 29 do seu exemplo, o android studio me sugere R.id.list_item_post_title_textview. quando seleciono essa opcao acontece o erro Unexpected cast to ListView.

    Quando escrevo a linha identica ao exemplo, o erro q acontece é Cannnot resolve symble ‘list_last_posts’.

    Eu escrevi o código na nova versao do Android Studio, por tanto esse trecho de código está na MainActivityFragment.xml

    Sera q você teria como ajudar?

    obrigada

    • Olá! Tudo ótimo e você?

      No passo 4, inflamos a View passando como primeiro parâmetro R.layout.fragment_main (ou seja, iremos atrás de uma View dentro desse arquivo XML), como segundo parâmetro container, que será a raiz do XML inflado e como terceiro e último parâmetro passamos false para que o layout inflado não seja atribuido a esse raiz que passamos (deixamos false, pois o Adapter é que vai trabalhar colocando as Views onde devem estar).

      Esse método retorna o layout inflado à variável rootView, por isso que na linha 29 podemos “achar” a ListView usando o código rootView.findViewById(R.id.list_last_posts).

      Dessa forma, dá uma verificada se seu arquivo XML de layout está com esse nome e possui uma ListView com esse ID. Caso esteja versionando (recomendo muito que esteja) e queira/possa passar o link do seu repositório no GitHub, ficaria mais fácil de eu dar uma olhada!

      Qualquer dúvida é só perguntar e dar uma olhada no repositório (lembrando que precisa ser no branch da aula, pois o Master já está com o código da última Aula).

      • Ana Prante

        Oi, tudo bem.

        Obrigada pela ajuda. eu vi o q faltava. No passo 1, eu optei por ir no design e em vez de simplesmente copiar o código q você deu. No passo fala q se eu fizesse assim, teria q alterar as propriedades layout_width e layout_height, e acabei esquecendo de alterar o id da ListView.

        O curso está mt bom, pena q você nao consegue postar as aulas mais frequentemente, mas entendo a falta de tempo.

        abraco

        • Opa! Que ótimo que funcionou :D
          Pois é… infelizmente o curso não é minha fonte de renda, então acabo demorando um pouquinho, mas a aula 9 já está saindo e de quebra a 10 vem logo em seguida :D

          Abraços

  • Lucas Silva

    Bom dia Mário !!

    Eu importei tudo que era necessário, mas meu getActivity() ainda está dando o seguinte erro:

    • Olá! Tudo bem?
      Você está tentando reproduzir esse arquivo, certo? Dá uma conferida na diferença: no link o código que você está colocando no método onCreateView está indo na Activity, mas no meu caso, estou colocando no Fragment. Arruma aí e deve funcionar.

      Abraços!

      • Junior Vilas Boas

        Boa tarde, estou tendo o mesmo problema!
        Você criou outro arquivo que extends do Fragment ou alterou o MainActivity?

  • Kauly Bohm

    Boa noite Mario!

    Muito bom seu curso, difícil de encontrar material dessa qualidade “for free” nesses tempos.

    Então, quando criamos o projeto na Aula 3, vc informa que as novas versões do Android Studio não possuem a opção de criar o layout “blank with fragment”. E é verdade, estou a um tempão procurando MainActivityFragment.java, como vc disse na Atualização no final do post, mas acho que ela nem é criada na nova versão. To querendo encontrar o método onCreatView. Tenho que criar uma classe que estenda a classe Fragment, e nela criar o onCreatView, é isso?

    No meu content_main.xml, têm essa propriedade: tools:context=”.MainActivity$PlaceholderFragment”

    Sera que existe um PlaceholderFragment perdido no projeto?

    • Exato! O template não vem mais com um Fragmento pronto e pretendo fazer um post só sobre as atualizações novas e o que mudam nas aulas passadas, mas cadê o tempo?

      Por enquanto, se não tiver um Fragmento, basta criá-lo! Sempre é uma boa prática ter Activities e Fragments, principalmente quando formos levar pra tablet e afins…

      Abração!

      • Kauly Bohm

        Valeuu Mario

        Foi mas fácil criar outro projeto, pois têm uma opção para criar o fragment automático. Quando estamos criando o projeto, na última tela de configuração tem um checkbox “use a fragment”. Dai fica tudo como vc informou na atualização do post.
        Abraço!

  • Rodrigo Rudenas

    Muito bom!!
    O meu Studio é atualizado então algumas coisas estão diferentes, mas consegui o/
    Mas antes de chegar aqui eu li quase todos os links que foi deixado nos textos, com conteúdos extras, recomendo a todos os iniciantes ou até mais experientes a estudar esses conteúdos dos links, assim no meio da digitação dos códigos aparecerá problemas que vc pode resolver sozinho, (porque nem sempre é um “erro” e sim digitação “errada”) pois estudou sobre os assuntos naqueles links espalhados no meio dos textos.
    Mário, não cheguei a aula 8, mas ja dei uma lida por cima, e pergunto: Acabou na aula 8?
    Teremos mais um curso parecido com esse?

    • Olá, Rodrigo!
      Que bom que está conseguindo e seu conselho é super útil! Os textos/links extras estão justamente aí pra ajudar a ter um entendimento maior, afinal em TI temos que sempre estudar!

      Sobre a Aula 8, não! Ainda não acabou, só estou tendo problemas de tempo e de computador pra continuar escrevendo as aulas, mas a 9 e demais devem sair assim que possível!

      Abração!

  • Leandro Santana

    Mário, seus posts sobre Dev Android são demais. Estou curtindo muito, continue assim. Agora nessa aula 5 me surgiu uma dúvida. Fiz todos os procedimentos, mais não está aparecendo o resultado final. A lista ainda contem os itens anteriores e não os itens criados de acordo com as aulas. Poderia me dizer o que aconteceu, pois aqui não demonstra nenhum erro no código?

    • Olá, Leandro!
      Obrigado por estar lendo as aulas, fico super feliz.

      Dá uma conferida no nomes das classes (View, Fragment, Activity). Talvez alguma esteja trocado o que não está deixando o ArrayAdapter atualizar o conteúdo. A parte do código que popula os dados é o método onCreateView do fragmento.

      Abraços!

  • Glaucimarlus

    Cara parabéns pelas aulas, quase desisti porque não estava dando certo mas por acaso consegui achar o erro e finalmente deu certo. Tenho uma dúvida. No resultado final entre os textos das aulas parece haver uma linha, mas quando troquei as cores percebi que na verdade é o bg do fragment. Tem como aumentar esse espaço entre as “caixas” do texto? Por exemplo se eu tivesse uma imagem no bg do frament a sensação de que esses textos estariam sobre a o layout do fragment seria maior.

    • Tem sim! Dá uma pesquisada nos atributos dessa View na documentação dela.

  • Josimar Souza

    Eu conseguiiiii….

  • Murilo Cavalcanti

    Sou novo no Android Studio e não sei praticamente nada de Java… Tentei aprender Java mas não consigo ligar Java com programação de Java para uso específico no android… Isso tudo tá explodindo minha mente :/
    Tem alguma dica de por onde eu devo começar?

    • Olha… tem que saber:
      – Lógica de Programação
      – Orientação a Objeto
      – Básico de Java e XML

      Sem isso não dá… a documentação é excelente! E o Android é uma mãe: sempre tem método pra tudo e bibliotecas que vão te ajudar, mas você precisa entender o que está escrevendo principalmente para resolver problemas e bugs, que irão aparecer.

      Dá uma relaxada, esquece o Android por enquanto e tenta riscar os itens dessa lista… aposto que você consegue! :D

      • Murilo Cavalcanti

        Obg :) vou tentar

  • Lourenço, sem a mensagem de erro fica difícil ajudar.
    Tenta pesquisar com o texto da mensagem de erro no Google ou reinstalar/atualizar os plugins e a SDK.

    Abraços

  • Raphael Silva

    Ao tentar abrir o arquivo (fragment_main.xml) aparece essa mensagem. Oque pode ser?

    • Isso e só um problema de Renderização. Pode desconsiderar, ele deve funcionar no dispositivo normalmente.

      Para ser sincero, nunca uso o editor “Design” para telas complexas (com fragments e taz) porque quase nunca renderiza direito. Abraços!

      • Raphael Silva

        Mas eu não consigo abrir o arquivo para editar!

  • Gabi

    Site limpo e estou gostando das aulas. Continue, por favor rs!
    Mario, estou com um problema de versão. Uso o Android Studio 2.1.3 e ele não gera o arquivo fragment_main.xml, o que posso fazer quanto a isso?

  • Gabi

    Obrigada pela ajuda anterior. Uma dúvida: Como posso criar uma Virtual Device antiga?

    • No Android Studio você consegue baixar imagens de quase todas as versões.