Android Criando um ListView Personalizado

Custom ListView

Mudamos agora veja em: http://helpdev.com.br/2012/01/23/android-criando-um-listview-personalizado/

Para criar um listView personalizado não é difícil porem é um trabalho chato de se fazer.
O conceito é, preencher uma lista de objetos que contem os dados de seu item e passar essa lista para um adapter que irá preencher o ListView, através desse adapter nós poderemos ter o controle sobre a lista, podendo remover item adicionar e pegar o selecionado.

Primeiro crie o layout de onde ficara seu listView, para isso criei o “main.xml”:

Mudamos agora veja em: http://helpdev.com.br/2012/01/23/android-criando-um-listview-personalizado/

Após a criação do layout de apresentação criaremos o Item, vou criar um item bem simples, com uma texto e uma imagem. “item_listview.xml”:

Mudamos agora veja em: http://helpdev.com.br/2012/01/23/android-criando-um-listview-personalizado/

Pronto a parte do XML está feita! agora vamos implementar no código.

Primeiramente criaremos nosso Objeto de acordo com nosso item.

Mudamos agora veja em: http://helpdev.com.br/2012/01/23/android-criando-um-listview-personalizado/

Após criado o Objeto vamos criar o Adapter, o coração do ListView.
Vejá como é simples:

Mudamos agora veja em: http://helpdev.com.br/2012/01/23/android-criando-um-listview-personalizado/

Pronto. Toda estrutura está feita, agora vamos colocar para funcionar.
Segue o código de implementação na nossa Activity principal:

Mudamos agora veja em: http://helpdev.com.br/2012/01/23/android-criando-um-listview-personalizado/

Observação: As imagens foram inseridas na pasta res/drawable/ para quem não saiba, após inserida as imagens lá podemos pegar sua referencia pelo ResId.

Para quem quiser o projeto:

http://dl.dropbox.com/u/15643399/CustomListView.zip

Att.

Guilherme Biff Zarelli

Anúncios

60 comentários sobre “Android Criando um ListView Personalizado

  1. Pingback: Android criando um ListView « Think Different – Develop

  2. Muito bom o post!! Tenho duas perguntas:
    1. Qual IDE você utilizou para fazer este projeto???
    2. Depois de criada a aplicação, já em tempo de execução, como posso adicionar itens à lista? O dados podem ser inseridos através de um EditText e um Button por exemplo! Mas como adicioná-los ao ListView?
    3. Tem algum problema ter outros itens juntamente com o ListView? Por exemplo:

    Agradeço muito se puder responder…

    • Obrigado Webert…
      Bom vamos lá…
      .
      1. Qual IDE você utilizou para fazer este projeto???
      R: Eu utilizei o NetBeans, estou mais familiarizado e gosto da interface.
      .
      2. Depois de criada a aplicação, já em tempo de execução, como posso adicionar itens à lista? O dados podem ser inseridos através de um EditText e um Button por exemplo! Mas como adicioná-los ao ListView?
      R: Sim você pode criar um edText e um bt e adicionar normalmente.
      O EditText e o Botao é so criar em seu XML que contem a ListView, essa parte acho que vc deve saber como fazer.
      Na parte de adicionar item é simples tambem, seguindo meu exemplo na classe MainActivity você tem um ArrayList de “itens” e o AdapterListView como variaveis, basta adicionar mais um item no arrayList e der um update no adapterListView ex:
      =============(MainActivity)
      public void addItem(String texto, int idImagem){
      ItemListView item = new ItemListView(texto, idImagem);
      itens.add(item1);
      adapterListView.notifyDataSetChanged();
      }
      =============
      Isso é permitido porque o arrayList que você passa pro adapterView é por referencia, então o que você mudar nele sera alterado no adapter.
      .
      (opcional) Para ter mais segurança o que normalmente faço e não deixar o arrayList como variavel de classe na MainActivity, criando um método que adiciona e remove itens dentro do proprio adapter, já que lá você tem o array e o método notifyDataSetChanged. Iria ficar do mesmo jeito porem melhor orientado e no local correto ex:
      ===================(AdapterListView)
      public void addItem(String texto, int idImagem){
      ItemListView item = new ItemListView(texto, idImagem);
      itens.add(item);
      notifyDataSetChanged();
      }
      ===================
      .
      3. Tem algum problema ter outros itens juntamente com o ListView? Por exemplo:
      Sem problemas nenhum.

  3. Olá Guilherme, parabéns pelo post, muito bom.

    Gerei uma versão similar aqui e funcionou blz.

    Queria tirar uma duvida, vc sabe se tem como eu mudar a cor da linha que separa os itens da lista?

    • Obrigado Derzu.
      Bom para mudar a cor é bem simples, no seu arquivo de layout xml, vá no componente ListView e altere/insira o valor:

      android:divider=”#ECECEC”

      esse #ECECEC é a cor em hexa, para altera-la basta mudar o codigo. Existem varios sites que te geram o hexa da cor de acordo com a cor que você queira. De uma olhada nesse site: http://www.efeitosespeciais.net/tabela.htm nele você encontra varias cores com seus respectivos valores hexa, basta pegar e alterar no codigo.

  4. Muito bom o post.Só uma pergunta e se eu quiser inserir mais imagens e texto na linha como faço?
    já declarei aqui mais sempre quando vou chamar lá no
    private void createListView() {
    ….
    }
    da um erro,Porque será?

    • STella para você inserir mais itens de acordo com o exemplo é só você adicionar mais um objeto ItemListView dentro do array “ArrayList itens” (tudo isso dentro do método createListView)….
      Não sei te dizer qual o erro que está dando, me mande o erro para analisar que te respondo.
      Obrigado.

  5. ola , Post muito bom
    estou como uma duvida,
    como eu posso deixa um item selecionado na lista.
    exemplo do um click no item da lista e aquele item fica colorido “selecionado”.
    obrigado
    agradeço desde Ja

    • Não é possível fazer isso nativamente eu acredito, mas dá para fazer de varias outras formas, por exemplo, seu item é um XML ele tem seu LinearLayout root, defina um ID para ele, e adicione no objeto dos itens algo que diz que está selecionado ou não, ai quando você clica no item, vai ser chamado o evento “onitemclickselected”(se nao me engano) neste evento você define no objeto que está selecinado e atualiza o adapter, quando fazer isso no no método “getView” do Adapter Customizado você pega o LinearLayout e da um “setBackgroundColor” por exemplo.
      Pronto, você vai ter no objeto se está ou não selecionado e visivelmente tambem.

  6. ola, muito bom seu codigo, mas tenho uma duvida quanto ao fazer uma listview dinamica, onde pode ser inserida varios itens ao list e faze-la se atualizar. vc teria algo sobre isso?

    • Para inserir mais itens e atualizar é simples, basta adicionar mais um item no seu array de itens e chamar o metodo de atualização como no exemplo abaixo:

      ItemListView item = new ItemListView(texto, idImagem);
      itens.add(item1);
      adapterListView.notifyDataSetChanged();

      Este exemplo é respectivo ao exemplo do post.

  7. Parabens Guilherme, muito bom o post. estava procurando por isso…
    Mas eu tenho uma duvida, tenho uma aplicação com um menu de opções, como faço para que uma delas chame esse ListView?

    • Tudo bem Diego?
      cara vou te explicar bem por cima talvez você entenda ou não… qualquer coisa te explico mais detalhado.
      O conceito é o seguinte seu menu é composto por varias Views(LinearLayout,Buttons,TextView, etc) na sua classe de menu você deve implementar onClickListener e definir na view do item do seu menu o setOnClickListener(this); para escutar a ação de seleção. no método implementado do onclickListener basta você comparar se a view que você apertou é a mesma view do parametro do método, feito isso, é só você criar uma intent (Intent it = new Intent(this,ListaCustomizavel.class);) e chamar o startActivity passando sua intent (startActivity(it);).
      Pronto assim você vai chamar o ListView atravez de um menu.

  8. Parabéns Guilherme, belo post
    Tenho uma dúvida quanto mudar a cor do item selecionado ( deixar eu até sei) o problema é se eu voltar da outra activity, ele continua com a cor no fundo do item que selecionei para ir para activityB
    Como poderia para fazer para clicar e mudar a cor do fundo somente para mostrar q esta sendo clicado naquele item, tipo um click splash ( por um determinado tempo e depois volta ao normal)

    • éssa é um pouquinho mais complicada… eu cheguei a fazer isso mas não foi com ListView… eu criei a lista manual com LinearLayout para cada item… ai o que eu fiz:
      1- implementei o OnTouchListener na minha classe.
      2- dei um .setOnTouchListener nos meus itens (seria no linearlayout do item/item root)
      3- ai voce iria implementar o onTouch, nele você vai tratar o seu “click splash” do jeito que você quer segue um exemplo:

          public boolean onTouch(View arg0, MotionEvent arg1) {
              if (arg1.getAction() == MotionEvent.ACTION_DOWN) {
                  arg0.setBackgroundColor(Color.argb(50, 10, 130, 150));
              } else if (arg1.getAction() == MotionEvent.ACTION_UP || arg1.getAction() == MotionEvent.ACTION_CANCEL) {
                  view.setBackgroundColor(Color.TRANSPARENT);
              }
              return true;
          }
      

      acho que deu pra dar uma entendida deve ter outras formas… caso você não consiga da um tok ;)… mas acredito que dessa forma funcione o que você quer pois você tem as action_up e action_cancel, isso não vai deixar que a cor fique “setada”;

      • Valeu Guilherme… obrigado pela ajuda
        Funcionou certinho o q vc passou.
        Agora tenho outra duvida, sou meio novo na programação android
        Como eu posso testar a conexão com o meu servidor, tenho um configurador onde digita o ip e porta, ai queria testar se ela está certa, como poderia fazer isso.
        Vc tem algum exemplo ai, se tiver poderia me explicar como usar
        Obrigado novamente.

      • Bom você poderia fazer uma operalção comum… por exemplo se seu servidor for um socket tenta abrir a conexão se der excessão quer dizer que não é, se for um Servelet tenta tambem tente realizar alguma operação no servidor(mesmo procedimento)… da para voce fazer um teste de “ping” porem depende muito do servidor pois a maioria a porta é bloqueada mas você pode usar “InetAddress.getByName(“http://wordpress.com”).isReachable(1000);”

        teste por socket:

        try {
            Socket socket = new Socket("servidro.com.br", 8081);
            socket.getInputStream();
        } catch (Exception e) {
            e.printStackTrace();
        }
        

        HTTP:

                try {
                    URL url = new URL("http://servidor.com.br:8081/");
        
                    HttpURLConnection http = (HttpURLConnection) url.openConnection();
                    http.setRequestMethod("POST");
                    http.addRequestProperty("content-type", "application/binary");
                    http.setDoInput(true);
                    http.setDoOutput(true);
        
                    http.connect();
                } catch (Exception e) {
                    e.printStackTrace();
                }
        

        Se der excessão em algum dos casos você vai saber que não é o endereço correto 😉 ai você pode implementar coisas mais complexas como realizar alguma operação mesmo se estiver certo para garantir que não so o endereco esteja certo mas tambem o serviço.

  9. Valeu pelo tutorial, me ajudou legal aki…
    Eu tive um problema atualmente com este codigo, eu fiz algo em cima doq vc postou. No caso seria uma tela bem parecida com essa, mas sem imagem.
    Fora do listview, tem um botao que ao ser clicado enviaria dados para o socket. Esse sistema do socket separadamente, esta funcionando normal, mas qndo coloco ele nesse clique do botão nao funciona… Meu sistema do android ja esta bem grande, talvez o meu erro seja com threads, no caso de eu usar mais de uma thread da algum problema ou saberia dizer oq pode esta acontecendo??

    • Assim meio por cima é dificíl de saber, mas provavelmente pode ser pelas threads mesmo.. é um pouco complexo você utilizar threads no android pois você trabalha com threads de interface grafica e threads comuns… ou sejá se você esta em uma thread comun você não consegue interagir com sua tela.
      Da uma estudada em AsyncTask esse recurso vai te proporcionar você realizar um processo paralelo(thread) e com interação na interface grafica…
      https://zarelli.wordpress.com/2012/02/10/asynctask-executando-tarefas-em-segundo-plano/

      • É isso mesmo que vc disse, eu testei no meu celular q é inferior ao android 3, ele funcionou normal, mas no meu tablet q é 3. alguma coisa não funcionou. E pelo q olhei por ai é isso mesmo… Mas estou muito perdido como usar essa classe, me dá uma luz se possivel…

      • Opa, ja consegui aqui, conseguir entender o tutorial que vc me passou, era realmente isso… Me parece que o android a partir do 3 adiante não aceita o uso de multiplas thread sem o uso do AsynTask… Pois no meu celular funcionou e no tablet nao funciou como disse anteriormente. Ao utilizar esse AsynTask, funcionou blz…
        Vlw mesmo, ajudou muito, sucesso pra ti…

  10. Parabéns pelo post, muito bom mesmo!!!
    mas, infelizmente, estou com problemas na criação do projeto Android.
    Estou utilizando o NetBeans, e sou novo em java.
    para desenhar a aplicação utilizo o DroidDraw, que cria o Xml automaticamente.
    O problema é que o Netbeans da erro na linha do xml:
    “xmlns:android=”http://schemas.android.com/apk/res/android”>”
    ele não acha qualquer layout.
    O que faço agora???
    Por favor, me ajude se você puder…
    Agradeço desde já!!!

  11. Parabéns, ficou muito bom mesmo!

    Estava precisando exatamente disso para implementar no meu TCC da minha pós graduação.

    Obrigado!

  12. Guilherme, parabéns pelo post!

    Eu gostaria de deixar meu listview em alto relevo, ou seja, causar um efeito similar ao que o aplicativo do Twitter e Facebook fazem. Tentei achar uma forma de colocar uma sombra, porém não tive sucesso. Você pode me ajudar?

    Obrigado.
    Denisson.

  13. Só um detalhe, vc cria o ListView com o id “tela_consulta_listView”. E depois invonca um ListView no código usando o id “list”. Isso ocasionaria um erro, não?

    • Com certeza… obrigado pela observação… corrigido para “list”

      • Cara, eu não sei o que fiz de errado, mas eu criai um projeto igual ao teu e aqui não dá certo. já tentei ver todos os detalhes e continua dando errado. Pelo que vi, o problema é o método createListView(), pois se eu comento a chamada ao método, a aplicação não dá erro, mas também não aparece nada no ListView, logicamente. Mas se eu chamo esse método, então é gerado o erro Unfortunately app has stopped. Tu já tentou fazer um projeto seguindo esse turorial pra ver se dá certo? Será que não tem mais alguma alteração que tu esqueceu de mencionar? Sei lá…

      • cara já tentei sim e funciona… algumas coisas que você tem que observar.. está vendo que chamo imagens para preencher minha lista? você tem essas imagens na pasta drawable do projeto ? tenta baixar o projeto no link do post (http://dl.dropbox.com/u/15643399/CustomListView.zip) e testar, depure o projeto e fale o erro um pouco mais especifico que tento responder melhor para você. Abrass.

  14. Eu já baixei o teu projeto, ele executa sem maiores problemas, ou seja, sou eu que to fazendo algo errado aqui ainda. Eu já copiei as imagens para as pastas res/drawable do meu projeto, o problema não é esse. Na verdade, não tem nenhum erro de compilação. É só falha na execução do app mesmo. Vou depurar melhor aqui e te aviso quando conseguir e porque não estava conseguindo. Obrigado.

  15. Cara, como eu falei, era eu que estava fazendo merda aqui mesmo. Fui pego pelo xml. Na hora de digitar, eu coloquei android.id=”@+id/imagemview”, ou seja, coloquei ponto ao invés de dois pontos antes de id. Pior que isso não gera erro, só um warning, que eu não estava dando muita bola. E o pior que mesmo assim é gerado na classe R um id imagemview, mas o aplicativo não executa. Esse é o problema de querer digitar tudo e não só copiar e colar, mas eu to preferindo fazer assim, já que to aprendendo aogra. Valeew

  16. amigo, ótimo tutorial, implementei aqui e funcionou perfeitamente, mas eu tenho uma dúvida como eu faço para quando eu adicionar um item novo na lista ele ganhar foco na lista ou no minimo ser posicionado na parte visivel da lista, já tentei por vários métodos da ListView mas sem sucesso, no adapter não encontrei nada que pudesse me ajudar, vc poderia me dar uma luz?

  17. Muito bom!

    Queria sua ajuda pois estou desenvolvendo meu TCC, é uma aplicação médica bem simples onde são listados medicamentos e posso realizar várias buscas por diferentes atributos do medicamento.

    já montei as telas só que estou com alguns problemas:

    1º não estou conseguindo trazer a lista dos medicamentos para ficar embaixo do campo de busca:

    me ajude a tentar resolver esse problema e se possível os próximos, desde já agradeço muito, muito mesmo.

    Não Android na faculdade só no livro por isso estou com esse problemas simples.

    • Antonio para fazer uma lista com um campo e bem simples segue o xml da tela:

      <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                    android:orientation="vertical"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
      >
          <LinearLayout 
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
          >
              <EditText  
                  android:id="@+id/ed"
                  android:layout_width="wrap_content" 
                  android:layout_height="wrap_content" 
                  android:layout_weight="1" 
              />
              <Button
                  android:id="@+id/bt"
                  android:layout_width="wrap_content" 
                  android:layout_height="wrap_content" 
                  android:text="Buscar"
              />
          </LinearLayout>
          
          
          <ListView
              android:id="@+id/lista"
              android:layout_width="fill_parent" 
              android:layout_height="fill_parent"
              />
          
      </LinearLayout>
      

      O resto é simples (preencher a lista), se você seguir esse tutorial você consegue e antes da uma estudada nesse :
      https://zarelli.wordpress.com/2011/05/24/android-criando-um-listview/

  18. Muito Bom… vou dar uma analisada com calma .. mas eh justamente o que queria saber … vlw … abraço

  19. VALEU CARA !!!
    Acabei de usar aqui e show de bola

  20. Pingback: Android Criando um ListView Personalizado « Arthur Lehdermann

  21. Guilherme, ficou muito bom seu tutorial só uma duvida eu consegui adicionar imagens do banco, tudo certinho só não consigo adicionar em cima um edittext para poder fazer pesquisa, qndo eu adiciono ele duplica o edit … como eu poderia fazer isso ? já procurei em tudo que é site e não achei nada

    • O Layout ficaria assim:

      <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                    android:orientation="vertical"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
      >
          <EditText 
              android:id="@+menu_lateral/find"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:hint="Pesquisa de usuários..."
          />
          
          <ListView
              android:id="@+menu_lateral/list_view"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:dividerHeight="2sp"
          />
       
      </LinearLayout>
      

      Seria isso?

  22. Prezado amigo:

    Gostaria de saber se você pode me dar uma luz sobre um problema que estou tendo com uma listview.

    Tenho o seguinte código, da minha estrutura xml, para minha atividade inicial:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="10dp"
        android:background="@drawable/bkg2" >
    
            <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/app_name"
            android:background="#000000"
            android:textColor="#ffffff"
            android:textSize="28sp"
            android:gravity="center_horizontal"
            android:paddingTop="10dp"
            android:paddingBottom="10dp">
        	</TextView>
        
    	    <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content">
            
            <ImageView
                android:contentDescription="@string/desctopo"
                android:id="@+id/sample_image2"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:adjustViewBounds="true"
                android:src="@drawable/topo"
                android:scaleType="fitXY">
            </ImageView>
            
            <TextView
                android:id="@+id/sample_title"
                android:text="@string/desctopo"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="#ffffffff"
                android:textSize="12sp"
                android:background="#AA000000"
                android:padding="5dp"
                android:layout_alignParentLeft="true"
                android:layout_alignBottom="@id/sample_image2">
            </TextView>
    	        
    	    </RelativeLayout>
        
    	    <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content">
            
    		<ListView
    		    android:id="@+id/mainListView"
    		    android:layout_width="fill_parent"
    		    android:layout_height="wrap_content"
        		android:padding="40dip" >
    		</ListView>
    		
    		</RelativeLayout>
    
    	    <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" >
            
    	        <ImageView
                android:contentDescription="@string/desctopo"
                android:id="@+id/sample_image"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:adjustViewBounds="true"
                android:src="@drawable/footer2"
                android:scaleType="fitXY"
                android:layout_alignParentBottom="true" >
            	</ImageView>
            	
                <TextView
                android:id="@+id/sample_title2"
                android:text="@string/desctopo"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="#ffffffff"
                android:textSize="12sp"
                android:background="#AA000000"
                android:padding="5dp"
                android:layout_alignParentLeft="true"
                android:layout_alignBottom="@id/sample_image">
            	</TextView>
            	
            </RelativeLayout>
            
    </LinearLayout>
    

    Como pode ser visto, tenho uma listview, no meio do meu layout.
    Depois, tenho outro layout xml, descrevendo a entrada individual dos ítens da listview:

    
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/rowTextView" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"
     android:padding="10dp"
     android:textSize="24sp"
     android:textColor="#ffffff" >
    </TextView>
    

    Em meu código, de minha main activity. java, tenho:

        // Find the ListView resource. 
        mainListView = (ListView) findViewById( R.id.mainListView );
            
        // Create and populate a List of names.
        String[] veiculos = new String[] { "Veículos Automotores e Ônibus Elétricos", "Reboques e Semi-Reboques", "Ciclomotores", "Motonetas, Motocicletas e Triciclos",
                                          "Quadriciclos", "Tratores de Rodas e Mistos", "Tratores de Esteiras"};  
        ArrayList<String> veiculosList = new ArrayList<String>();
        veiculosList.addAll( Arrays.asList(veiculos) );
        
        // Create ArrayAdapter using the list.
        listAdapter = new ArrayAdapter<String>(this, R.layout.simplerow, veiculosList);
        
        // Set the ArrayAdapter as the ListView's adapter.
        mainListView.setAdapter( listAdapter );    
    

    Tudo funciona muito bem, mas, se eu tento colocar qualquer outro elemento no arquivo xml dos itens do listview, o programa dá pau (trava o android e tenho que desligar o aparelho e ligar de novo).

    Agradeceria alguma sugestão, para entender o que está acontecendo.
    Estou iniciando em programação java e Android, portanto peço um pouco de paciência comigo.

    Obrigado.

  23. O erro é o que descrevi, o Android trava e tenho que desligar o tablet.
    Este erro acontece assim que executo o programa.

    Veja:

    Com o código do arquivo assim, não dá erro:

    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/rowTextView" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"
     android:padding="10dp"
     android:textSize="24sp"
     android:textColor="#ffffff" >
    </TextView>
    

    Com o código assim, dá erro ( o tablet trava):

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/list_selector"
        android:orientation="horizontal"
        android:padding="5dip" >
        
    	<TextView
    	 android:id="@+id/rowTextView" 
    	 android:layout_width="fill_parent" 
    	 android:layout_height="wrap_content"
    	 android:padding="10dp"
    	 android:textSize="24sp"
    	 android:textColor="#ffffff" >
    	</TextView>
    
         <!-- Rightend Arrow -->
         <ImageView android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:src="@drawable/arrow"
          android:layout_alignParentRight="true"
          android:layout_centerVertical="true"/>
         
    </RelativeLayout>
    

    Meu arquivo MainActivity.java é:

    package com.ssaguiar.inspecaoveicular;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.ArrayAdapter;
    import android.widget.AdapterView;
    import android.widget.ListView;
    import android.view.View;
    import android.widget.AdapterView.OnItemClickListener;
    import android.content.Intent;
    import android.content.pm.PackageManager;
    
    import android.hardware.Camera;
    import android.widget.ImageView;
    import android.widget.VideoView;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.os.Bundle;
    import android.app.Activity;
    import android.util.Log;
    import android.view.Menu;
    import android.view.View;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
      
      private ListView mainListView ;
      private ArrayAdapter<String> listAdapter ;
      
      private Camera camera;
      private int cameraId = 0;
      
      /** Called when the activity is first created. */
      @Override
      public void onCreate(Bundle savedInstanceState) {
    	  
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        setTitle("Sistema de Inspeção Veicular - (c)2013 - ssaguiar");
        
        
        
        if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
    
        	setTitle("No camera on this device");
        }
        else 
        {
        	setTitle("Camera found on this device");
        }
        
        
        // Find the ListView resource. 
        mainListView = (ListView) findViewById( R.id.mainListView );
            
        // Create and populate a List of names.
        String[] veiculos = new String[] { "Veículos Automotores e Ônibus Elétricos", "Reboques e Semi-Reboques", "Ciclomotores", "Motonetas, Motocicletas e Triciclos",
                                          "Quadriciclos", "Tratores de Rodas e Mistos", "Tratores de Esteiras"};  
        ArrayList<String> veiculosList = new ArrayList<String>();
        veiculosList.addAll( Arrays.asList(veiculos) );
        
        // Create ArrayAdapter using the list.
        listAdapter = new ArrayAdapter<String>(this, R.layout.simplerow, veiculosList);
        
        // Set the ArrayAdapter as the ListView's adapter.
        mainListView.setAdapter( listAdapter );    
      	
        OnItemClickListener listener = new OnItemClickListener() {
        	
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
     
    		  switch( position )
    		  {
    			 case 0:     
    				   Intent myIntent = new Intent(view.getContext(), automotores.class);
    				   startActivityForResult(myIntent, 0);
    				   break;
    			 case 1:
    				   Intent myIntent1 = new Intent(view.getContext(), reboques.class);
    				   startActivityForResult(myIntent1, 0);				 
    				   break;
    			 case 2: 
    				   Intent myIntent2 = new Intent(view.getContext(), ciclomotores.class);
    				   startActivityForResult(myIntent2, 0);				 
    			       break;
    			 case 3: 
    				   Intent myIntent3 = new Intent(view.getContext(), motonetas.class);
    				   startActivityForResult(myIntent3, 0);
    			       break;
    			 case 4:
    				   Intent myIntent4 = new Intent(view.getContext(), quadriciclos.class);
    				   startActivityForResult(myIntent4, 0);
    			       break;
    			 case 5: 
    				   Intent myIntent5 = new Intent(view.getContext(), tratoresrodas.class);
    				   startActivityForResult(myIntent5, 0);
    			       break;
    			 case 6:
    				   Intent myIntent6 = new Intent(view.getContext(), tratoresesteiras.class);
    				   startActivityForResult(myIntent6, 0);
    			       break;
    		  }
    
            }
            
          };
          
          mainListView.setOnItemClickListener(listener);
      }
      
    }
    
    
    • Pode ser problema com o RelativeLayout, tente usar o LinearLayout… mas mesmo assim não da para descobrir o erro, conecte-o ao ddms/monitor e me informe o erro exato! somente com o código é complicado avaliar.

  24. Os códigos xml referem-se ao arquivo simplerow.xml.

    O arquivo activity_main.xml é:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="10dp"
        android:background="@drawable/bkg2" >
    
            <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/app_name"
            android:background="#000000"
            android:textColor="#ffffff"
            android:textSize="28sp"
            android:gravity="center_horizontal"
            android:paddingTop="10dp"
            android:paddingBottom="10dp">
        	</TextView>
        
    	    <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content">
            
            <ImageView
                android:contentDescription="@string/desctopo"
                android:id="@+id/sample_image2"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:adjustViewBounds="true"
                android:src="@drawable/topo"
                android:scaleType="fitXY">
            </ImageView>
            
            <TextView
                android:id="@+id/sample_title"
                android:text="@string/desctopo"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="#ffffffff"
                android:textSize="12sp"
                android:background="#AA000000"
                android:padding="5dp"
                android:layout_alignParentLeft="true"
                android:layout_alignBottom="@id/sample_image2">
            </TextView>
    	        
    	    </RelativeLayout>
        
    	    <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content">
            
    		<ListView
    		    android:id="@+id/mainListView"
    		    android:layout_width="fill_parent"
    		    android:layout_height="wrap_content"
        		android:padding="40dip" >
    		</ListView>
    		
    		</RelativeLayout>
    
    	    <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" >
            
    	        <ImageView
                android:contentDescription="@string/desctopo"
                android:id="@+id/sample_image"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:adjustViewBounds="true"
                android:src="@drawable/footer2"
                android:scaleType="fitXY"
                android:layout_alignParentBottom="true" >
            	</ImageView>
            	
                <TextView
                android:id="@+id/sample_title2"
                android:text="@string/desctopo"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="#ffffffff"
                android:textSize="12sp"
                android:background="#AA000000"
                android:padding="5dp"
                android:layout_alignParentLeft="true"
                android:layout_alignBottom="@id/sample_image">
            	</TextView>
            	
            </RelativeLayout>
            
    </LinearLayout>
    
  25. Ou seja, todo o problema acontece ao modificar o arquivo simplerow.xml, que define a aparência de cada entrada do listview.

  26. OLá ótimo post, porém tenho uma dúvida, se eu quiser carregar essa listview direto de um banco de dados como eu faria??
    por exemplo eu teria uma primeira tela com um botão pesquisar e ao clicar nesse pesquisar eu queria que em outra tela aparecece a listView com os dados carregados. Como eu faria isso Guilherme?

      • Olá guilherme sempre ótimos posts, eu tenho um banco de dados.Vou lhe explicar meu appteste
        Ele tem 2 spinners 1 que contem os nomes escola, praça, hospital, e o outro spinner tem os bairros da cidade. BairroA, BairroB…E um botão pesquisar.
        De maneira que ao selecionar no spinner 1, escola. p.ex. e no spinner2 o bairroB.. Em uma outra tela eu queria que apareceçem todos as escolas do bairro B.

        Eu criei um banco de dados com 4 tabelas, a tabela de escola, praça, hospital e uma outra para os bairros, sendo cada tabela em 4 classes diferentes com os mesmos nome EscolaDAO,PracaDAO,HospitalDAO, BairroDAO… fiz o select, join para cada uma. Só que eu não estou conseguindo implementar um método para que minha MainActivity consiga ler esses dados para fazer um filtro de pesquisa e jogue em uma ListView em outra tela.
        Vc tem algum tutorial para fazer isso?
        Qualquer outra informação adicional que vc queira eu posso estar lhe enviando por email. Assim fica melhor 🙂
        Um grande Abraço, eu amo seu blog

      • Obrigado pelo carinho Jessica… bom vamos ver…
        1- Você já esta conseguindo trazer os dados do banco?
        2- Você está populando os spinner?
        3- Quando clica no botao pesquisar você está conseguindo pegar os valores do spinner?
        Depois de me responder isso vou saber em que parte você está…

  27. Guilherme sim populei os spinners, porém não estou conseguindo pegar os valores dos spinners pelo clic do botão. Nem conseguindo trazer os dados vindos do banco.

  28. Pingback: Android criando um ListView | Help DEV

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s