Utilizando BaseAdapter Para Personalização Completa da ListView

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes! Você receberá um email de confirmação. Somente depois de confirma-lo é que eu poderei lhe enviar os conteúdos semanais exclusivos. Os artigos em PDF são entregues somente para os inscritos na lista.

Email inválido.
Blog /Android /Utilizando BaseAdapter Para Personalização Completa da ListView

Utilizando BaseAdapter Para Personalização Completa da ListView

Vinícius Thiengo
(15807) (30)
Go-ahead
"O método consciente de tentativa e erro é mais bem-sucedido que o planejamento de um gênio isolado."
Peter Skillman
Prototipagem Android
Capa do curso Prototipagem Profissional de Aplicativos
TítuloAndroid: Prototipagem Profissional de Aplicativos
CategoriasAndroid, Design, Protótipo
AutorVinícius Thiengo
Vídeo aulas186
Tempo15 horas
ExercíciosSim
CertificadoSim
Acessar Curso
Quer aprender a programar para Android? Acesse abaixo o curso gratuito no Blog.
Lendo
TítuloManual de DevOps: como obter agilidade, confiabilidade e segurança em organizações tecnológicas
CategoriaEngenharia de Software
Autor(es)Gene Kim, Jez Humble, John Willis, Patrick Debois
EditoraAlta Books
Edição
Ano2018
Páginas464
Conteúdo Exclusivo
Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba gratuitamente conteúdos Android sem precedentes!
Email inválido

Tudo bem?

Na vídeo aula acima nós vamos destrinchar a classe adaptadora BaseAdapter.

Este que é um componente Android complementar ao framework de lista ListView.

Componente utilizado para permitir que nós desenvolvedores consigamos personalizar por completo o layout de itens de nossa lista.

E apesar de não ser obrigatório, eu fortemente recomendo que você dê atenção especial ao momento em que o padrão ViewHolder é trabalhado.

Diagrama de funcionamento do padrão ViewHolder no ListView

Isso, pois é com a implementação deste padrão que o seu aplicativo diminui o risco de ter uma OutOfMemoryException (vazamento de memória) devido à criação indiscriminada de objetos no espaço de memória reservado ao seu aplicativo.

Alguns desenvolvedores na comunidade Android indicam que o ganho em performace quando utilizando o ListView  com o ViewHolder é de 175% 🤯 em relação ao uso deste mesmo framework de lista sem o ViewHolder.

É importante ressaltar que como pré-requisito da aula acima é esperado que você já conheça o framework de lista ListView. Caso contrário você vai ficar um pouco perdido na aula.

Antes de lhe deixar prosseguir com a vídeo aula, vale ressaltar que conhecer o ListView e a classe adaptadora BaseAdapter já é o conhecimento completo de ao menos um framework de lista profissional Android.

De qualquer forma isso não faz com que outros conteúdos aqui do Blog que envolvem o ListView não tenham mais importância.

Logo, vou lista-los a seguir para você posteriormente aumentar o seu conhecimento sobre este framework de lista:

Agora um desabafo 😔 para você que provavelmente está iniciando no desenvolvimento de aplicativos Android (ListView e BaseAdapter são conteúdos base no Android):

É bem provável que em novos aplicativos você não utilize o ListView e consequentemente o BaseAdapter.

Isso principalmente devido à importância que o RecyclerView já tem no cenário Android. Ele é um framework de lista mais completo e robusto.

Mesmo assim... não deixe de dar uma atenção especial ao que é falado na vídeo aula acima sobre o ViewHolder e sobre o LayoutInflater.

Este último que apesar de ser muito utilizado em inúmeros projetos (incluindo projetos com o RecyclerView), é pouco comentado.

LayoutInflater é, em resumo, uma fábrica de objetos de layout.

Então é isso.

Antes de finalizar, vou deixar abaixo alguns links de outros artigos do Blog, também com vídeos, que lhe colocarão em dia com o que há de atual no mundo do desenvolvimento Android:

E caso você tenha o desejo de aprender a criar apps Android, ou evoluir nesta área, também com o conteúdo gratuito do Blog, então não deixe de acessar a lista gratuita de estudos em: 

Não esqueça de se inscrever 📫 na lista de e-mails do Blog para receber os conteúdos Android exclusivos, liberados semanalmente... e também em suas versões em PDF (versões em PDF são liberadas somente aos inscritos da lista de e-mails).

Se inscreva também no canal do Blog no YouTube para acompanhar as últimas novidades disponibilizadas em vídeo aula.

Surgindo dúvidas ou dicas, pode colocar abaixo na área de comentários que logo eu lhe retorno.

Obs. : o link para download do projeto apresentado na vídeo aula se encontra logo abaixo no artigo, na seção "Download".

Abraço.

Eclipse IDE vs Android Studio IDE

Apesar do conteúdo da vídeo aula deste artigo estar utilizando o IDE Eclipse 😱, tudo que é apresentado, tanto a parte teórica quanto a parte prática, é ainda válido nos dias de hoje com o desenvolvimento Android utilizando o Android Studio IDE 😁.

Ou seja, independente da linguagem oficial (Java, Kotlin, C ou C++), IDE ou framework que você esteja utilizando, o conteúdo acima é ainda muito válido.

AndroidX

Apesar do conteúdo sobre a classe adaptadora BaseAdapter ainda estar atual e ser de grande importância para qualquer nível de desenvolvedor Android.

Apesar disso eu também recomendo, assim que finalizado o projeto em sua própria instalação de IDE, que você o migre para o AndroidX.

Algo que pode ser feito com poucos cliques, como apresentado no tutorial a seguir: Migrar para o AndroidX.

Fontes

Documentação oficial Android LayoutInflater

Documentação oficial Android BaseAdapter

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes!
Email inválido

Relacionado

Entendendo a Thread Principal de Um App AndroidEntendendo a Thread Principal de Um App AndroidAndroid
Entendendo e Utilizando ListActivity no AndroidEntendendo e Utilizando ListActivity no AndroidAndroid
ListView: Entendendo e Utilizando no AndroidListView: Entendendo e Utilizando no AndroidAndroid
SimpleAdapter no ListView, Entendendo e Utilizando no AndroidSimpleAdapter no ListView, Entendendo e Utilizando no AndroidAndroid

Compartilhar

Comentários Facebook

Comentários Blog (30)

Para código / script, coloque entre [code] e [/code] para receber marcação especifica.
Forneça seu nome válido.
Forneça seu email válido.
Forneça o comentário.
Enviando, aguarde...
08/05/2017
Thiengo, primeiramente parabéns sou novo por aqui e tenho acompanhado seus vídeos para começar a desenvolver em android.

Tive um problema ao usar o BaseAdapter com listview, no método getView() quando uso mais itens do que aparece em meu celular o valor do position reinicia a contagem, tem alguma forma de utilizar o valor contando todos os itens da lista e não reiniciar quando a contagem quando apresenta valores da lista que estavam ocultos na tela?
Responder
Vinícius Thiengo (1) (0)
09/05/2017
Renato, tudo bem?

Aparentemente o parâmetro position do método getView() não está repetindo, isso pois se forneceu uma lista de objetos ao adapter e em getCount() forneceu o tamanho dela, o parâmetro position vai respeitar esse tamanho.

O que pode estar acontecendo é que a lógica de negócio dentro deste método está errada, digo, não está com o padrão ViewHolder ou se está, não está preenchendo o layout corretamente.

Se possível, revise todo o adapter, principalmente o método getView(). Se mesmo assim nada, coloque o código de seu adapter no PasteBin (https://pastebin.com/ ) e compartilhe o URI do código aqui, assim poderia ver o que pode estar ocorrendo. Abraço.
Responder
12/05/2017
Vinícius muito obrigado, havia um erro na implementação do padrão ViewHolder, ao corrigir funcionou conforme o esperado. Agora já me sinto livre para avançar aos próximos vídeos xD
Responder
25/09/2016
Fala Thiengo.
Cara.. muito bom o vídeo ( para variar...rs)
Consigo inflar a view sem problemas na listview, mas como faço pra setar o texto de um textview que está no mesmo layout do listview com valores do adapter? Uma soma dos Itens por exemplo...
Obrigado!
Responder
Vinícius Thiengo (0) (0)
26/09/2016
Luciano, blz?
Tem várias maneiras de fazer isso. Uma simples é criar um método publico simples na Activity que se encontra o ListView.

Com o contexto passado ao adapter, aplique o cast:

SuaActivity suaActivity = (SuaActivity) context;

Depois acesse o método no getView(), por exemplo:

suaActivity.somaValue( valor );

Assim, em SuaActivity, vc pode utilizar uma variável de instância que será atualizada com a soma ao valor passado como argumento:

...
public void somaValue( TipoValue value ){
    this.value += value;
    seuTextView.setText( ""+this.value );
}
...

Veja se assim funciona. Abraço
Responder
Daniel Tibúrcio Silva Filho (1) (0)
14/06/2016
Consegui colocar a figura, mas ficou um espaço em branco à direita dos resultados
Responder
Vinícius Thiengo (0) (0)
18/06/2016
Daniel, respondido nos comentários do Facebook. Abraço
Responder
15/06/2015
Thiengo, muito bons seus videos, parabéns!! estão me ajudando bastante em meu atual projeto.. Estou tentando implementar uma listview seguindo o exemplo do vídeo, mas não estou conseguindo faze-la exibir todos itens que foram passados pelo adapter.. somente uma linha está sendo exibida. Segue a parte onde o array é passado para o adapter:
JSONArray ja;

                                    ja = response.getJSONArray("atividades");
                                    ArrayList ativi = new ArrayList();
                                    for(int i = 0, tam = ja.length(); i < tam; i++) {
                                        Atividades atv = new Atividades();

                                        ordem = ja.getJSONObject(i).getString("ordem");
                                        nomeexercicios = ja.getJSONObject(i).getString("nomeexercicios");
                                        qtdserie = ja.getJSONObject(i).getString("qtdserie");
                                        numrepeticoes = ja.getJSONObject(i).getString("numrepeticoes");
                                        carga = ja.getJSONObject(i).getString("carga");
                                        nomeequipamentos = ja.getJSONObject(i).getString("nomeequipamentos");
                                        status_ativ = ja.getJSONObject(i).getString("status_ativ");

                                        atv.setOrdem(ordem);
                                        atv.setNomeexercicios(nomeexercicios);
                                        atv.setQtdserie(qtdserie);
                                        atv.setNumrepeticoes(numrepeticoes);
                                        atv.setCarga(carga);
                                        atv.setNomeequipamentos(nomeequipamentos);
                                        atv.setStatus_ativ(status_ativ);

                                        ativi.add(new Atividades(ordem,nomeexercicios,qtdserie,numrepeticoes,carga,nomeequipamentos,status_ativ));
                                    }
                                    ListView lv = (ListView) getView().findViewById(R.id.lvList);
                                    lv.setAdapter(new PernasAdapter(getActivity(), ativi));
No caso, os dados vem de um json e deste é passado para o array. getview do adapter:
@Override
    public View getView(int position, View convertView, ViewGroup parent) {

        Atividades atividades = lista.get(position);
        View layout;

        if(convertView == null){
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            layout = inflater.inflate(R.layout.row, null);
        }
        else{
            layout = convertView;
        }
            TextView ordem = (TextView) layout.findViewById(R.id.tvOrdem);
            TextView nomeexercicios = (TextView) layout.findViewById(R.id.tvExercicio);
            TextView qtdserie = (TextView) layout.findViewById(R.id.tvSerie);
            TextView numrepeticoes = (TextView) layout.findViewById(R.id.tvRepeticoes);
            TextView carga = (TextView) layout.findViewById(R.id.tvCarga);
            TextView nomeequipamentos = (TextView) layout.findViewById(R.id.tvEquipamentos);
            Button status_ativ = (Button) layout.findViewById(R.id.btStatus);

            ordem.setText(atividades.getOrdem());
            nomeexercicios.setText(atividades.getNomeexercicios());
            qtdserie.setText(atividades.getQtdserie());
            numrepeticoes.setText(atividades.getNumrepeticoes());
            carga.setText(atividades.getCarga());
            nomeequipamentos.setText(atividades.getNomeequipamentos());

            if (position % 2 == 0) {
                layout.setBackgroundColor(Color.LTGRAY);
            }

        return layout;
    }
Responder
Vinícius Thiengo (0) (0)
16/06/2015
Fala Renan, blz?
Verifique com o LogCat se sua lista, logo quando enviada ao adapter, tem mais do que apenas um elemento. Verifique tb se o ListView está com um android:layout_height que permite apresentar mais de uma linha, coloque um background vermelho no ListView que vc vai saber pelo tamanho do View tingido. Abraço
Responder
16/06/2015
Beleza!
Consegui! muito obrigado, Thiego. :D
O layout da ListView estava com uma altura que possibilitava apresentar apenas uma linha.
E mais uma vez, parabéns pelo trabalho, o conteúdo que você disponibiliza aqui é de excelente qualidade e ajuda bastante.
Responder
Andre Luiz (0) (0)
12/03/2015
Olá Thiengo, tudo bem?
Me ajuda com uma coisa. Como consigo personalizar uma listview trabalhando com fragment ?
Estou querendo criar uma custom listview simples,com uma foto e duas textview,porém, minha activity tem de ser "extends Fragment ", se eu mudar essa linha pra "ListFragment" ou qualquer outra, dá erro na minha activity anterior.
Ps:essa listview sera implementada numa tab usando fragment.
Desde já obrigado.
Responder
Vinícius Thiengo (0) (0)
13/03/2015
Fala Andre, blz?
Vc no caso faria a mesma coisa que fiz no vídeo dentro de uma Activity, porém vc faria isso dentro do método onCreateView() de seu fragment, se ainda não manja de fragment, dê uma olhada nesse vídeo (http://www.thiengo.com.br/fragments-no-android-trabalhando-com-multiplas-activities ). Só uma observação, na verdade vc tem uma classe / fragment que extends Fragment. Para ser Activity ela teria um extends de Activity, ActivityActionBar, FragmentActivity, ... Dê uma olhada no vídeo de fragment e vê se consegue desenrolar. Outra coisa é utilizar o RecyclerView com um LayoutManager, ele é mt mais eficiente que o ListView e BaseAdapter, porém esse ainda não fiz vídeo sobre. Abraço
Responder
Andre Luiz (1) (0)
16/03/2015
Opa Thiengo. Entao, obrigado pela ajuda, acho que agora falta pouco. Minha Fragment ficou assim agora:
 package com.oneapp.tiradentes;

import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;

import java.util.ArrayList;

public class FragmentA extends Fragment {

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

        View rootView = inflater.inflate(R.layout.activity_main4, container, false);


        ArrayList carros = new ArrayList();

        for(int i = 0; i < 5; i++){

            Carro carro = new Carro();
            carro.setModelo("Carro "+(i + 1));
            carro.setMarca("Marca "+(i + 1));

            carros.add(carro);
        }

        ListView lv = (ListView) getView().findViewById(R.id.lv);
        lv.setAdapter(new CarroAdapter(this, carros));

        return rootView;
    }
}
na linha :
        lv.setAdapter(new CarroAdapter(this, carros)); 
está apresentando um erro e nao consigo rodar a app. o que está faltando eu modificar ? Mais uma vez obrigado.
Responder
Vinícius Thiengo (0) (0)
16/03/2015
André ao invés de utilizar new CarroAdapter(this, carros), coloque new CarroAdapter(getActivity(), carros), pois o contexto que vc está passando é o do Fragment quando o BaseAdapter está esperando pelo context da Activity. Abraço
Responder
Andre Luiz (1) (0)
16/03/2015
Perfeito Vinícius. Projetinho sem erros, porém quando mandei rodar, ele trava quando chamo a Fragment em questao. Esse é o logcat:
03-16 22:01:12.870    1052-1052/com.oneapp.tiradentes E/AndroidRuntime? FATAL EXCEPTION: main
    Process: com.oneapp.tiradentes, PID: 1052
    java.lang.NullPointerException
            at com.oneapp.tiradentes.FragmentE.onCreateView(FragmentE.java:29)
            at android.support.v4.app.Fragment.performCreateView(Fragment.java:1786)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1126)
            at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
            at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1489)
            at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:486)
            at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
            at android.support.v4.view.ViewPager.populate(ViewPager.java:1073)
            at android.support.v4.view.ViewPager.populate(ViewPager.java:919)
            at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1441)
            at android.view.View.measure(View.java:17331)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5376)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
            at android.view.View.measure(View.java:17331)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5376)
            at android.support.v7.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:453)
            at android.view.View.measure(View.java:17331)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5376)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
            at android.view.View.measure(View.java:17331)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5376)
            at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1410)
            at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
            at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
            at android.view.View.measure(View.java:17331)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5376)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2548)
            at android.view.View.measure(View.java:17331)
            at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2279)
            at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1393)
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1592)
            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1251)
            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6540)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:813)
            at android.view.Choreographer.doCallbacks(Choreographer.java:613)
            at android.view.Choreographer.doFrame(Choreographer.java:583)
            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:799)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:146)
            at android.app.ActivityThread.main(ActivityThread.java:5593)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
            at dalvik.system.NativeStart.main(Native Method)
Será que ainda consegue me ajudar ?
Responder
Vinícius Thiengo (0) (0)
17/03/2015
André, aparentemente sua linha 29 em com.oneapp.tiradentes.FragmentE.onCreateView está com uma variável null que vc está tentando acessar como se fosse um objeto completo. O que há na linha 29 desse método desse fragment? Abraço
Responder
Andre Luiz (1) (0)
17/03/2015
Oi Thiengo, cara, desculpa te ocupar tanto, mas obrigado por estar me ajudando. Minha FragmentE é essa:

package com.oneapp.tiradentes;

import java.util.ArrayList;
import android.app.Activity;
import android.support.v4.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.text.util.Linkify;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;

public class FragmentE extends Fragment {

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


        ListView lista = (ListView) getView().findViewById(R.id.listadirectivos);
        //ListView lv = (ListView) getView().findViewById(R.id.lv);
        ArrayList arraydir = new ArrayList();
        //lista.setOnItemClickListener(chamaAtividades());
        Directivo directivo;


        // Introduzco los datos
        directivo = new Directivo(getResources().getDrawable(R.drawable.ambulance8), "Animed Pet Shop", "Atendimento veterinário...");
        arraydir.add(directivo);
        directivo = new Directivo(getResources().getDrawable(R.drawable.briefcase11), "Kamp Imóveis", "Entregue seu imóvel para...");
        arraydir.add(directivo);
        directivo = new Directivo(getResources().getDrawable(R.drawable.camera46), "Luziana Lanna Idiomas", "Pessoas diferentes precisam...");
        arraydir.add(directivo);
        directivo = new Directivo(getResources().getDrawable(R.drawable.earth17), "M. Helena Imóveis", "Vendas e Aluguéis de...");
        arraydir.add(directivo);
        directivo = new Directivo(getResources().getDrawable(R.drawable.fork9), "Paty Baby", "A loja especializada no...");
        arraydir.add(directivo);





        // Creo el adapter personalizado
        AdapterDirectivos adapter = new AdapterDirectivos(getActivity(), arraydir);


        // Lo aplico
        lista.setAdapter(adapter);


        return View;

    }



  /*  @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.principal, menu);
        return true;
    }   */

}

package com.oneapp.tiradentes;

import java.util.ArrayList;
import android.app.Activity;
import android.support.v4.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.text.util.Linkify;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;

public class FragmentE extends Fragment {

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


        ListView lista = (ListView) getView().findViewById(R.id.listadirectivos);
        //ListView lv = (ListView) getView().findViewById(R.id.lv);
        ArrayList arraydir = new ArrayList();
        //lista.setOnItemClickListener(chamaAtividades());
        Directivo directivo;


        // Introduzco los datos
        directivo = new Directivo(getResources().getDrawable(R.drawable.ambulance8), "Animed Pet Shop", "Atendimento veterinário...");
        arraydir.add(directivo);
        directivo = new Directivo(getResources().getDrawable(R.drawable.briefcase11), "Kamp Imóveis", "Entregue seu imóvel para...");
        arraydir.add(directivo);
        directivo = new Directivo(getResources().getDrawable(R.drawable.camera46), "Luziana Lanna Idiomas", "Pessoas diferentes precisam...");
        arraydir.add(directivo);
        directivo = new Directivo(getResources().getDrawable(R.drawable.earth17), "M. Helena Imóveis", "Vendas e Aluguéis de...");
        arraydir.add(directivo);
        directivo = new Directivo(getResources().getDrawable(R.drawable.fork9), "Paty Baby", "A loja especializada no...");
        arraydir.add(directivo);





        // Creo el adapter personalizado
        AdapterDirectivos adapter = new AdapterDirectivos(getActivity(), arraydir);


        // Lo aplico
        lista.setAdapter(adapter);


        return View;

    }



  /*  @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.principal, menu);
        return true;
    }   */

}
package com.oneapp.tiradentes;

import java.util.ArrayList;
import android.app.Activity;
import android.support.v4.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.text.util.Linkify;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;

public class FragmentE extends Fragment {

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


        ListView lista = (ListView) getView().findViewById(R.id.listadirectivos);
        //ListView lv = (ListView) getView().findViewById(R.id.lv);
        ArrayList arraydir = new ArrayList();
        //lista.setOnItemClickListener(chamaAtividades());
        Directivo directivo;


        // Introduzco los datos
        directivo = new Directivo(getResources().getDrawable(R.drawable.ambulance8), "Animed Pet Shop", "Atendimento veterinário...");
        arraydir.add(directivo);
        directivo = new Directivo(getResources().getDrawable(R.drawable.briefcase11), "Kamp Imóveis", "Entregue seu imóvel para...");
        arraydir.add(directivo);
        directivo = new Directivo(getResources().getDrawable(R.drawable.camera46), "Luziana Lanna Idiomas", "Pessoas diferentes precisam...");
        arraydir.add(directivo);
        directivo = new Directivo(getResources().getDrawable(R.drawable.earth17), "M. Helena Imóveis", "Vendas e Aluguéis de...");
        arraydir.add(directivo);
        directivo = new Directivo(getResources().getDrawable(R.drawable.fork9), "Paty Baby", "A loja especializada no...");
        arraydir.add(directivo);





        // Creo el adapter personalizado
        AdapterDirectivos adapter = new AdapterDirectivos(getActivity(), arraydir);


        // Lo aplico
        lista.setAdapter(adapter);


        return View;

    }



  /*  @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.principal, menu);
        return true;
    }   */

}
package com.oneapp.tiradentes;

import java.util.ArrayList;
import android.app.Activity;
import android.support.v4.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.text.util.Linkify;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;

public class FragmentE extends Fragment {

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


        ListView lista = (ListView) getView().findViewById(R.id.listadirectivos);
        //ListView lv = (ListView) getView().findViewById(R.id.lv);
        ArrayList arraydir = new ArrayList();
        //lista.setOnItemClickListener(chamaAtividades());
        Directivo directivo;


        // Introduzco los datos
        directivo = new Directivo(getResources().getDrawable(R.drawable.ambulance8), "Animed Pet Shop", "Atendimento veterinário...");
        arraydir.add(directivo);
        directivo = new Directivo(getResources().getDrawable(R.drawable.briefcase11), "Kamp Imóveis", "Entregue seu imóvel para...");
        arraydir.add(directivo);
        directivo = new Directivo(getResources().getDrawable(R.drawable.camera46), "Luziana Lanna Idiomas", "Pessoas diferentes precisam...");
        arraydir.add(directivo);
        directivo = new Directivo(getResources().getDrawable(R.drawable.earth17), "M. Helena Imóveis", "Vendas e Aluguéis de...");
        arraydir.add(directivo);
        directivo = new Directivo(getResources().getDrawable(R.drawable.fork9), "Paty Baby", "A loja especializada no...");
        arraydir.add(directivo);





        // Creo el adapter personalizado
        AdapterDirectivos adapter = new AdapterDirectivos(getActivity(), arraydir);


        // Lo aplico
        lista.setAdapter(adapter);


        return View;

    }



  /*  @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.principal, menu);
        return true;
    }   */

}

A linha 29 parece ser essa:
        ListView lista = (ListView) getView().findViewById(R.id.listadirectivos);

Abraço.
Responder
Vinícius Thiengo (0) (0)
18/03/2015
André, ao invés de utilizar:

ListView lista = (ListView) getView().findViewById(...);

utilize:

ListView lista = (ListView) View.findViewById(...);

porém certifique-se de que a referencia R.id.listadirectivos existe no layoutR.layout.activity_main4. Faça isso para todos os acessos a views dentro de seus onCreateView() dos fragments. Depois veja se roda sem problemas. Abraço
Responder
Andre Luiz (1) (0)
18/03/2015
Perfeito Thiengo, só queria agradecer mesmo, muito obrigado,funcionou perfeitamente. Se eu quiser arredondar as bordas dessa imagem da listview eu consigo com bootstrap ? Mudo via xml ou tenho que mecher no código?
Abraços Thiengo, muito obrigado.
Responder
Vinícius Thiengo (0) (0)
19/03/2015
Andre, com o bootstrap provavelmente não, mas consegue realizar isso no xml mesmo como no link a seguir (http://stackoverflow.com/questions/9837145/how-to-make-a-rounded-corners-for-an-image-in-image-view-using-xml-layout-in-and ). Com o Picasso Lib e o Makeramen RoundedImageView Lib vc tem mais poder de fogo para deixar a imagem redonda mesmo. Abraço
Responder
Andre Luiz (1) (0)
19/03/2015
Valew Thiengo, sucesso pra voce. Me ajudou muito, consegui agora dar continuidade no meu projeto. Um grande abraco amigo e muito obrigado.
Responder
01/02/2015
Ol? Thiengo, precisava de uma ajuda. Como posso alimentar um listview quando clicar em um bot?o? A l?gica que estou usando ? quando clico no bot?o abre Dialog os dados do listview.  implementei como base esse seu exemplo mas n?o obtive sucesso dessa forma.
Responder
Vinícius Thiengo (0) (0)
02/02/2015
Fala Luis, blz?
Fiquei na dúvida, vc quer colocar mais dados no ListView ou quer apresentar os detalhes do item do ListView que foi clicado? Para apresentar os detalhes vc está em um caminho certo (mostrar no Dialog), mas há outras maneiras tb (como mostrar em outra Activity, por exemplo). De todas as maneiras de apresentar dados, vc pode passar ou via Intent, nesse caso sua classe de itens teria de implementar um Parcelable (tb, apenas mais uma maneira) ou passando pelo construotr, no caso do Dialog, por exemplo. Se a questão é alimentar o ListView, os dados viriam de onde? Imaginando que o usuário colocaria mais itens por um form que seria aberto via Dialog, coloque um botão de finalizar cadastro do Item e então utilizei o EventBus para informar ao ListView que há mais dados, então coloque esse novo item na lista que preenche o listView e chame o notifuDataSetChanged() do adapter que está vinculado ao listView para atualizar o ListView. Abraço
Responder
02/02/2015
Seria ao clicar em um botao
- Ira abrir um Dialog e dentro dele tera o listview com os dados do sqllite, pois nao quero usar o Intent prefiro que fica na main Activity.

Dêu pra entender ?
Responder
02/02/2015
Para simplificar, clico no botão "LISTAR" abre o Dialog e com os dados carregados do sqllite no listview.
Dêu pra entender ?
Responder
Vinícius Thiengo (0) (0)
03/02/2015
Luis, acho que entendi. Seu Dialog tem um construtor? Se não tiver crie um que receberá a lista que preencherá o listView, assim vc terá uma várivel dentro do Dialog que está referenciando a mesma list que está no Activity, se fizer alguma alteração nela dentro do Dialog essa alteração será na mesma lista que está no Activity tb. Isso? Abraço
Responder
03/02/2015
Obrigado. Vou corrigir o código.
Responder
02/08/2014
Muito Obrigado, valeu mesmo.
Como disse o colega acima, vai direto ao ponto e um codigo limpo. Parabens!
Responder
Wagner (2) (0)
01/04/2014
Valeu amigo, farei uns testes disso aí, mas a explicação tá muito boa e vc não enrola. Show de bola
Responder
Vinícius Thiengo (1) (0)
01/04/2014
Vlw Wagner, abraço
Responder