Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Adapter com lista personalizada não aparece no aparelho!

Boa tarde amigos tudo bem?

Fiz o Adapter personalizado para exibir a lista de alunos com fotos (Android II - Capitulo 3 Melhorando o visual da lista de alunos).

A lista aparece perfeita no AVD mas quando utilizo no aparelho, não aparece nada do layout personalizado da lista, fica em branco.

O que pode ser? Pode ser versão do Android?

Obrigado desde já pessoal!

3 respostas

Oi Leonardo tudo bem ?

Cara estou achando bem estranho este seu erro, consegue disponibilizar o código do seu adapter e da sua activity para que possamos te ajudar ?

Abraços

Obrigado pela respostas Matheus! Seguem aí o meu código do Adapter e da Activity.

Adapter:

package br.com.baiocchilousa.agenda.adapter;


import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

import br.com.baiocchilousa.agenda.R;
import br.com.baiocchilousa.agenda.modelo.Aluno;

/**
 * Created by Leonardo on 19/03/2017.
 */

public class AlunosAdapter extends BaseAdapter {
    private final List<Aluno> alunos;
    private final Context context;

    public AlunosAdapter(Context context, List<Aluno> alunos) {
        this.context = context;
        this.alunos = alunos;
    }

    @Override
    public int getCount() {
        return alunos.size();
    }

    @Override
    public Object getItem(int position) {

        return alunos.get(position);
    }

    @Override
    public long getItemId(int position) {
        return alunos.get(position).getId();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        Aluno aluno = alunos.get(position);

        LayoutInflater inflater = LayoutInflater.from(context);

        // Para reaproveitar a view para gerar maior performance
        View view = convertView;
        if(view == null){
            view = inflater.inflate(R.layout.list_item, parent, false);
        }



        TextView campoNome = (TextView) view.findViewById(R.id.item_nome);
        campoNome.setText(aluno.getNome());

        TextView campoTelefone = (TextView) view.findViewById(R.id.item_telefone);
        campoTelefone.setText(aluno.getTelefone());

        ImageView campoFoto = (ImageView) view.findViewById(R.id.item_foto);
        String caminhoFoto = aluno.getCaminhoFoto();

        if(caminhoFoto != null) {
            Bitmap bitmap = BitmapFactory.decodeFile(caminhoFoto);
            //Reduz dimensões imagem - bitmap
            Bitmap bitmapReduzido = Bitmap.createScaledBitmap(bitmap, 100, 100, true);
            campoFoto.setImageBitmap(bitmapReduzido);
            campoFoto.setScaleType(ImageView.ScaleType.FIT_XY);
        }


        return view;
    }
}

Activity:

package br.com.baiocchilousa.agenda;

import android.Manifest;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

import java.util.List;

import br.com.baiocchilousa.agenda.adapter.AlunosAdapter;
import br.com.baiocchilousa.agenda.dao.AlunoDAO;
import br.com.baiocchilousa.agenda.modelo.Aluno;

public class ListaAlunosActivity extends AppCompatActivity {

    public static final int CODIGO_TELEFONE = 123;
    private ListView listaAlunos;
    private AlertDialog alerta;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lista_alunos);

        listaAlunos = (ListView) findViewById(R.id.listaAlunos);

        listaAlunos.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> lista, View item, int position, long id) {
                Aluno aluno = (Aluno) listaAlunos.getItemAtPosition(position);

                Intent intentVaiProFormulario = new Intent(ListaAlunosActivity.this, FormularioActivity.class);
                intentVaiProFormulario.putExtra("aluno", aluno);
                startActivity(intentVaiProFormulario);

            }
        });


        Button novoAluno = (Button) findViewById(R.id.btNovo);
        novoAluno.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intentVaiProFormulario = new Intent(ListaAlunosActivity.this, FormularioActivity.class);
                startActivity(intentVaiProFormulario);
            }
        });

        registerForContextMenu(listaAlunos);

    }

    private void carregaLista() {
        AlunoDAO dao = new AlunoDAO(this);
        List<Aluno> alunos = dao.buscaAlunos();
        dao.close();
        //Criamos um Adapter próprio para criar um layout customizado de uma lista
        AlunosAdapter adapter = new AlunosAdapter(this, alunos);
        listaAlunos.setAdapter(adapter);
    }

    @Override
    protected void onResume() {
        super.onResume();
        carregaLista();
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, final ContextMenu.ContextMenuInfo menuInfo) {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
        final Aluno aluno = (Aluno) listaAlunos.getItemAtPosition(info.position);

        MenuItem itemLigar = menu.add("Ligar");
        //Ligar com um listener para verificar a permissão de ligar pelo telefone
        itemLigar.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                //Verifica se tem a permissão de usar o telefone
                if(ActivityCompat.checkSelfPermission(ListaAlunosActivity.this, android.Manifest.permission.CALL_PHONE)
                        != PackageManager.PERMISSION_GRANTED){
                    ActivityCompat.requestPermissions(ListaAlunosActivity.this, new String[]{Manifest.permission.CALL_PHONE}, CODIGO_TELEFONE);
                } else{
                    Intent intentLigar = new Intent(Intent.ACTION_CALL);
                    intentLigar.setData(Uri.parse("tel:" + aluno.getTelefone()));
                    startActivity(intentLigar);
                }
                return false;
            }
        });



        MenuItem itemSMS = menu.add("Enviar SMS");
        Intent intentSMS = new Intent(Intent.ACTION_VIEW);
        intentSMS.setData(Uri.parse("sms:" + aluno.getTelefone()));
        itemSMS.setIntent(intentSMS);


        String site = aluno.getSite();
        if(!site.startsWith("http://")){
            site = "http://" + site;
        }
        MenuItem itemSite = menu.add("Visitar site");
        Intent intentSite = new Intent(Intent.ACTION_VIEW);
        intentSite.setData(Uri.parse(site));
        itemSite.setIntent(intentSite);

        MenuItem itemMapa = menu.add("Visualizar no mapa");
        Intent intentMapa = new Intent(Intent.ACTION_VIEW);
        intentMapa.setData(Uri.parse("geo:0.0?q=" + aluno.getEndereco()));
        itemMapa.setIntent(intentMapa);


        MenuItem excluir = menu.add("Excluir");
        excluir.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {

            //Cria o gerador do AlertDialog
            AlertDialog.Builder builder = new AlertDialog.Builder(ListaAlunosActivity.this);
            //define o titulo
            builder.setTitle("Excluir contato?");
            //define a mensagem
            builder.setMessage(aluno.getNome());
            //define um botão como positivo
            builder.setPositiveButton("Excluir", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface arg0, int arg1) {
                        AlunoDAO dao = new AlunoDAO(ListaAlunosActivity.this);
                        dao.exclui(aluno);
                        dao.close();
                        Toast.makeText(ListaAlunosActivity.this, "O contato " + aluno.getNome() + " foi excluído!",Toast.LENGTH_SHORT).show();
                        carregaLista();
                    }
                });
                //define um botão como negativo.
                builder.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface arg0, int arg1) {
                        Toast.makeText(ListaAlunosActivity.this, "Exclusão cancelada!", Toast.LENGTH_SHORT).show();
                    }
                });
            //cria o AlertDialog
            alerta = builder.create();
            //Exibe
            alerta.show();

            return false;
            }
        });
    }


    // Método chamado sempre que quiser executar uma ação após pedir a permissão do usuário
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        // Distinguir quem fez a requisição da permissão usando o request code
        if(requestCode == CODIGO_TELEFONE){
            //Faz a ligação
        }else if(requestCode == 124){
            // Faz outra coisa, envio do SMS
        }


    }
}
solução!

Matheus! Descobri! kkkkk Aparentemente minha lista de alunos estava vazia! Quando inserí um contato na agenda, "tadaaaaaa" apareceu a lista!

Obrigado pela consideração cara!

Abraços!!!!