<p>Olá pessoal! No tutorial de hoje da série sobre <strong>Android</strong> vamos começar a adicionar alguma funcionalidade ao nosso aplicativo. Com o post de hoje, conseguiremos adicionar contatos, que serão listados na parte superior do aplicativo!</p> <p>Começando a colocar a mão na massa, o primeiro passo é trocarmos a instância única da classe Contato por uma lista de objetos. Porém, a simples mudança acarretará alguns erros no código. Assim, também precisaremos montar o objeto no método <strong>onClick</strong> e o adicionarmos na lista. Com essas alterações, a nossa activity ficará assim:</p> <p><code>public class MeusContatos extends Activity implements OnClickListener { <br /> <br />    private List contatos = new ArrayList(); <br /> <br />    @Override <br />    protected void onCreate(Bundle savedInstanceState) { <br />        super.onCreate(savedInstanceState); <br />        setContentView(R.layout.activity_meus_contatos); <br /> <br />        Button salvar = (Button) findViewById(R.id.salvar); <br />        salvar.setOnClickListener(this); <br />    } <br /> <br />    @Override <br />    public boolean onCreateOptionsMenu(Menu menu) { <br />        // Inflate the menu; this adds items to the action bar if it is present. <br />       getMenuInflater().inflate(R.menu.activity_meus_contatos, menu); <br />      return true; <br />    } <br /> <br />    @Override <br />    public void onClick(View v) { <br />        EditText nome = (EditText) findViewById(R.id.nome); <br />        EditText email = (EditText) findViewById(R.id.email); <br /> <br />        Contato contato = new Contato(); <br />        contato.setNome(nome.getText().toString()); <br />        contato.setEmail(email.getText().toString()); <br /> <br />        RadioGroup tipoContato = (RadioGroup) findViewById(R.id.tipo_contato); <br /> <br />        switch (tipoContato.getCheckedRadioButtonId()) { <br />            case R.id.pessoal: <br />                contato.setTipo(Contato.Tipo.PESSOAL); <br />            break; <br />            case R.id.profissional: <br />                contato.setTipo(Contato.Tipo.PROFISSIONAL); <br />            break; <br />            case R.id.academico: <br />                contato.setTipo(Contato.Tipo.ACADEMICO); <br />            break; <br />        } <br /> <br />        contatos.add(contato); <br />    } <br />}</code></p> <p>Basicamente, o que fizemos foi retirar o objeto <strong>contato</strong> que estava no escopo da classe, passando a criá-lo método <strong>onClick</strong>. Além disso, criamos a lista chamada <strong>contatos</strong> como um atributo da classe, e ao final do método <strong>onClick</strong>, adicionamos o objeto à lista.</p> <p>O próximo passo é implementarmos o método <strong>toString()</strong> da classe <strong>Contato</strong>, já que ele será chamado quando os contatos forem listados. Para o nosso objetivo, nos interessa apenas o nome do contato por enquanto, de forma que o método <strong>toString()</strong> pode retornar simplesmente o atributo <strong>nome</strong>. Dessa forma, adicione o seguinte método a classe <strong>Contato</strong>:</p> <p><code>@Override<br />public String toString() {    <br />    return nome;<br />}</code>Agora temos a parte mais “desafiadora”, que é exatamente mostrar a lista de contatos na tela de acordo que formos adicionando-os. Para fazer isso, vamos adicionar um <strong>LinearLayout</strong>como “pai” do nosso <strong>RelativeLayout</strong> e complementando o layout com um <strong>ListView</strong> que abrigará a lista de contatos. Como o nosso formulário ficou meio grande, a divisão meio a meio da tela para os dois não é suficiente, de forma que teremos que fazer uso do atributo<strong>android:layout_weight</strong>. Veja como o fica o código do nosso layout (<strong>layout/activity_meus_contatos.xml</strong>):</p> <p><code><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"<br /> xmlns:tools="http://schemas.android.com/tools"<br /> android:layout_width="match_parent"<br /> android:layout_height="match_parent"<br /> android:orientation="vertical"<br /> tools:context=".MeusContatos" ><br /> <br /> <ListView<br />  android:id="@+id/contatos"<br />  android:layout_width="fill_parent"<br />  android:layout_height="0dp"<br />  android:layout_weight="1" /><br /> <br /> <RelativeLayout<br />  android:layout_width="fill_parent"<br />  android:layout_height="0dp"<br />  android:layout_weight="2.5" ><br /> <br />  <LinearLayout<br />   android:layout_width="match_parent"<br />   android:layout_height="wrap_content"<br />   android:layout_alignParentTop="true"<br />   android:orientation="vertical" ><br /> <br />   <TextView<br />    android:layout_width="wrap_content"<br />    android:layout_height="wrap_content"<br />    android:text="@string/nome" /><br /> <br />   <EditText<br />    android:id="@+id/nome"<br />    android:layout_width="fill_parent"<br />    android:layout_height="wrap_content"<br />    android:inputType="text" /><br /> <br />   <TextView<br />    android:layout_width="wrap_content"<br />    android:layout_height="wrap_content"<br />    android:text="@string/email" /><br /> <br />   <EditText<br />    android:id="@+id/email"<br />    android:layout_width="fill_parent"<br />    android:layout_height="wrap_content"<br />    android:inputType="textEmailAddress" /><br /> <br />   <TextView<br />    android:layout_width="wrap_content"<br />    android:layout_height="wrap_content"<br />    android:text="@string/tipo_contato" /><br /> <br />   <RadioGroup<br />    android:id="@+id/tipo_contato"<br />    android:layout_width="fill_parent"<br />    android:layout_height="wrap_content" ><br /> <br />    <RadioButton<br />     android:id="@+id/pessoal"<br />     android:layout_width="wrap_content"<br />     android:layout_height="wrap_content"<br />     android:text="@string/tipo_pessoal" /><br /> <br />    <RadioButton<br />     android:id="@+id/profissional"<br />     android:layout_width="wrap_content"<br />     android:layout_height="wrap_content"<br />     android:text="@string/tipo_profissional" /><br /> <br />    <RadioButton<br />     android:id="@+id/academico"<br />     android:layout_width="wrap_content"<br />     android:layout_height="wrap_content"<br />     android:text="@string/tipo_academico" /><br />   </RadioGroup><br />  </LinearLayout><br /> <br />  <Button<br />   android:id="@+id/salvar"<br />   android:layout_width="fill_parent"<br />   android:layout_height="wrap_content"<br />   android:layout_alignParentBottom="true"<br />   android:text="@string/salvar" /><br /> </RelativeLayout><br /> <br /></LinearLayout></code></p> <p>Perceba que zeramos o elemento <strong>android:layout_height</strong> (já que ele é obrigatório) e adicionamos <strong>1 </strong>ao <strong>android:layout_weight</strong> da lista e <strong>2.5</strong> no formulário. Isso significa que a proporção será de 2,5 para 1, ou seja, o formulário terá a largura 2,5 vezes maior que a listagem. Olhe como fica o nosso formulário:</p> <p><span class="img_editor"><img src="https://www.oficinadanet.com.br/imagens/post/9936/android-tutorial-071.png" alt="" /></span></p> <p>Agora, precisamos fazer alguns ajustes na nossa <strong>Activity</strong> para que os elementos sejam adicionados e listados. Vamos novamente editar a nossa <strong>Activity</strong>:</p> <p><code>public class MeusContatos extends Activity implements OnClickListener {<br /> <br />    private List<Contato> contatos = new ArrayList<Contato>();<br />    private ArrayAdapter<Contato> adaptador = null;<br /> <br />    @Override<br />    protected void onCreate(Bundle savedInstanceState) {<br />        super.onCreate(savedInstanceState);<br />        setContentView(R.layout.activity_meus_contatos);<br /> <br />        Button salvar = (Button) findViewById(R.id.salvar);<br />        salvar.setOnClickListener(this);<br /> <br />        ListView lista = (ListView) findViewById(R.id.contatos);<br />        adaptador = new ArrayAdapter<Contato>(this,<br />                android.R.layout.simple_list_item_1, contatos);<br />        lista.setAdapter(adaptador);<br />    }<br /> <br />    @Override<br />    public boolean onCreateOptionsMenu(Menu menu) {<br />        // Inflate the menu; this adds items to the action bar if it is present.<br />        getMenuInflater().inflate(R.menu.activity_meus_contatos, menu);<br />        return true;<br />    }<br /> <br />    @Override<br />    public void onClick(View v) {<br />        EditText nome = (EditText) findViewById(R.id.nome);<br />        EditText email = (EditText) findViewById(R.id.email);<br /> <br />        Contato contato = new Contato();<br />        contato.setNome(nome.getText().toString());<br />        contato.setEmail(email.getText().toString());<br /> <br />        RadioGroup tipoContato = (RadioGroup) findViewById(R.id.tipo_contato);<br /> <br />        switch (tipoContato.getCheckedRadioButtonId()) {<br />        case R.id.pessoal:<br />            contato.setTipo(Contato.Tipo.PESSOAL);<br />            break;<br />        case R.id.profissional:<br />            contato.setTipo(Contato.Tipo.PROFISSIONAL);<br />            break;<br />        case R.id.academico:<br />            contato.setTipo(Contato.Tipo.ACADEMICO);<br />            break;<br />        }<br /> <br />        adaptador.add(contato);<br />    }<br />}</code></p> <p>O que fizemos foi adicionar o elemento <strong>adaptador</strong>, do tipo <strong>ArrayAdapter</strong> para a nossa classe<strong>Contato</strong>. É ele quem fará a montagem dos restaurantes adicionados na tela. Definimos a forma como ele funcionará em seu construtor, na linha 32, indicando o segundo parâmetro<strong>android.R.layout.simple_list_item_1</strong>, dizendo que será uma lista da classe <strong>Contato</strong>, e passando como parâmetro também a nossa lista <strong>contatos</strong>. Vinculamos o adaptador, então, ao item <strong>ListView</strong> que foi declarado lá no arquivo XML e que o obtemos através do método <strong>findViewById()</strong>. Assim, chamamos seu método <strong>setAdapter</strong> e passamos o nosso adaptador.</p> <p>Ao final, no método <strong>onClick</strong>, ao invés de adicionarmos o restaurante à lista, adicionamos ao adaptador. O resultado será a lista de restaurantes sendo criada em nosso aplicativo:</p> <p><span class="img_editor"><img src="https://www.oficinadanet.com.br/imagens/post/9936/android-tutorial-08.png" alt="" /></span></p> <p>Bom, por hoje é isso! Pra quem teve problemas, pode baixar o projeto abaixo:</p> <p style="text-align: center;"><strong>Arquivos do projeto:</strong><br /><a href="https://www.oficinadanet.com.br/imagens/post/9936/meuscontatos-v04.zip"><img src="https://www.oficinadanet.com.br/imagens/post/9936/botaodownloadoficina.jpg" alt="" /></a></p>