Oi gente,
- Tenho um ImageButton com uma imagem;
- Ao clicar nesse ImageButton, aparece um Dialog perguntando se vc quer mudar a foto do contato(estou fazendo uma agenda eletrônica);
- Se vc clica “sim” no btn do Dialog, ele te leva ao gallery do celular, vc escolhe a imagem e logo em seguida a imagem aparece no mesmo ImageButton;
Problema: Se eu clicar no ImageButton novamente, sem fechar/abrir novamente a activity, para alterar novamente a imagem, ao clicar no btn “sim” do Dialog a gallery do celular não é chamada e eu não faço a mínima idéia do porque, já que nada aparece nem no LogCat, nem Console. Abaixo vai o código da activity:
package my.contacts;
import java.util.List;
import my.contacts.auxiliares.Contato;
import my.contacts.auxiliares.LerGravarExcluirScript;
import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;
public class DetalhesContato extends Activity {
String nome;
String dia;
String mes;
String email;
String fone;
String endereco;
String cidade;
String pais;
String imagem;
int indice;
int tamanhoList;
TextView tNome;
TextView tFone;
TextView aniversario;
TextView aniversarioMes;
TextView tEmail;
TextView tEndereco;
TextView tCidade;
TextView tEstado;
TextView tPais;
ImageButton profilePictureButton;
ImageButton ligarContato;
List<Contato> contatos;
Contato objContato;
LerGravarExcluirScript acoesBancoDados;
boolean threadDone = true;
Dialog dialog;
Dialog dialog2;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.detalhes_contato);
Intent it = getIntent();
nome = it.getStringExtra("nome");
dia = it.getStringExtra("diaAniversario");
mes = it.getStringExtra("mesAniversario");
email = it.getStringExtra("email");
fone = it.getStringExtra("fone");
endereco = it.getStringExtra("endereço");
cidade = it.getStringExtra("cidade");
pais = it.getStringExtra("país");
imagem = it.getStringExtra("imagem");
indice = it.getIntExtra("indice", 0);
tNome = (TextView) findViewById(R.id.nomeDisplay);
tNome.setText(nome);
tFone = (TextView) findViewById(R.id.foneDisplay);
tFone.setText(fone);
tEmail = (TextView) findViewById(R.id.emailDisplay);
tEmail.setText(email);
tEndereco = (TextView) findViewById(R.id.enderecoDisplay);
tEndereco.setText(endereco);
tCidade = (TextView) findViewById(R.id.cidadeDisplay);
tCidade.setText(cidade);
tPais = (TextView) findViewById(R.id.paisDisplay);
tPais.setText(pais);
profilePictureButton = (ImageButton) findViewById(R.id.profilePictureButton);
profilePictureButton.setOnClickListener(new BotaoProfilePicture());
ligarContato = (ImageButton) findViewById(R.id.callButton);
ligarContato.setOnClickListener(new BotaoLigarContato());
Bitmap image = BitmapFactory.decodeFile(imagem);
int h = 0;
int w = 0;
try{
h = image.getHeight();
w = image.getWidth();
Bitmap imagePredimensionada = null;
if(w > h) {
int int1 = (w - h)/2;
imagePredimensionada = Bitmap.createBitmap (image, int1, 0, h, h);
}
Drawable d = profilePictureButton.getDrawable();
int drawableAltura = d.getIntrinsicHeight ();
int drawableLargura = d.getIntrinsicWidth ();
Log.i("Contatos", "Altura drawable do ImageButton: " + drawableAltura + ", Largura drawable do ImageButton: " + drawableLargura);
Bitmap scaledImagem = null;
if(((drawableAltura == 150) || (drawableLargura == 150)) && imagePredimensionada == null) {
scaledImagem = Bitmap.createScaledBitmap(image, 150, 150, true);
}else if(((drawableAltura == 150) || (drawableLargura == 150)) && imagePredimensionada != null){
scaledImagem = Bitmap.createScaledBitmap(imagePredimensionada, 150, 150, true);
}else if(((drawableAltura == 112) || (drawableLargura == 112)) && imagePredimensionada == null) {
scaledImagem = Bitmap.createScaledBitmap(image, 112, 112, true);
}else if(((drawableAltura == 112) || (drawableLargura == 112)) && imagePredimensionada != null) {
scaledImagem = Bitmap.createScaledBitmap(imagePredimensionada, 112, 112, true);
}else if(((drawableAltura == 86) || (drawableLargura == 86)) && imagePredimensionada == null) {
scaledImagem = Bitmap.createScaledBitmap(image, 86, 86, true);
}else if(((drawableAltura == 86) || (drawableLargura == 86)) && imagePredimensionada != null) {
scaledImagem = Bitmap.createScaledBitmap(imagePredimensionada, 86, 86, true);
}
profilePictureButton.setImageBitmap(scaledImagem);
}catch(NullPointerException e) {
profilePictureButton.setImageResource(R.drawable.default_profile_picture);
}
}
private class BotaoProfilePicture implements OnClickListener {
public void onClick(View view) {
//set up dialog
dialog2 = new Dialog(DetalhesContato.this);
dialog2.setContentView(R.layout.mudar_foto_dialog_layout);
dialog2.setTitle(" Mudar foto do contato");
dialog2.setCancelable(true);
Button buttonSim = (Button) dialog2.findViewById(R.id.simBtn);
buttonSim.setOnClickListener(new BotaoSim2());
Button buttonNao = (Button) dialog2.findViewById(R.id.naoBtn);
buttonNao.setOnClickListener(new BotaoNao2());
dialog2.show();
}
}
protected class BotaoNao2 implements OnClickListener {
public void onClick(View v) {
dialog2.dismiss();
}
}
protected class BotaoSim2 implements OnClickListener {
public void onClick(View v) {
dialog2.dismiss();
Thread processoParalelo = new Thread(new MudarImagemContato());
processoParalelo.start();
}
}
protected class MudarImagemContato implements Runnable {
public void run() {
if (threadDone) {
Intent it = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(it, 1);
}
}
}
protected void onActivityResult(int requestCode, int resultCode, Intent it) {
super.onActivityResult(requestCode, resultCode, it);
switch(requestCode) {
case 1:
if(resultCode == RESULT_OK){
//Linhas 185 a 195: recupera a imagem escolhida pelo usuário e a transforma em bitmap
Uri selectedImage = it.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();
Bitmap imagem = BitmapFactory.decodeFile(filePath);
int h = imagem.getHeight();
int w = imagem.getWidth();
Bitmap imagemPredimensionada = null;
if(w > h) {
int int1 = (w - h)/2;
imagemPredimensionada = Bitmap.createBitmap (imagem, int1, 0, h, h);
}
//Linhas 198 a 202: grava o endereço(filePath) da imagem do contato no banco de dados
acoesBancoDados = new LerGravarExcluirScript(DetalhesContato.this);
contatos = acoesBancoDados.listarContatos();
//Recupera o objeto Contato que foi clicado:
objContato = contatos.get(indice);
acoesBancoDados.salvarImagem(filePath, objContato);
//Dimensionamento da imagem escolhida de acordo com o layout
Drawable d = profilePictureButton.getDrawable();
int drawableAltura = d.getIntrinsicHeight ();
int drawableLargura = d.getIntrinsicWidth ();
Log.i("Contatos", "Altura drawable do ImageButton: " + drawableAltura + ", Largura drawable do ImageButton: " + drawableLargura);
Bitmap scaledImagem = null;
if(((drawableAltura == 150) || (drawableLargura == 150)) && imagemPredimensionada == null) {
scaledImagem = Bitmap.createScaledBitmap(imagem, 150, 150, true);
}else if(((drawableAltura == 150) || (drawableLargura == 150)) && imagemPredimensionada != null){
scaledImagem = Bitmap.createScaledBitmap(imagemPredimensionada, 150, 150, true);
}else if(((drawableAltura == 112) || (drawableLargura == 112)) && imagemPredimensionada == null) {
scaledImagem = Bitmap.createScaledBitmap(imagem, 112, 112, true);
}else if(((drawableAltura == 112) || (drawableLargura == 112)) && imagemPredimensionada != null) {
scaledImagem = Bitmap.createScaledBitmap(imagemPredimensionada, 112, 112, true);
}else if(((drawableAltura == 86) || (drawableLargura == 86)) && imagemPredimensionada == null) {
scaledImagem = Bitmap.createScaledBitmap(imagem, 86, 86, true);
}else if(((drawableAltura == 86) || (drawableLargura == 86)) && imagemPredimensionada != null) {
scaledImagem = Bitmap.createScaledBitmap(imagemPredimensionada, 86, 86, true);
}
profilePictureButton.setImageBitmap(scaledImagem);
//Fecha o Banco de Dados
acoesBancoDados.fechar();
}
}
threadDone = false;
}
private class BotaoLigarContato implements OnClickListener {
public void onClick(View view) {
Intent intencao = new Intent(Intent.ACTION_DIAL,Uri.parse("tel:000000" + fone));
startActivity(intencao);
}
}
public boolean onCreateOptionsMenu(Menu menu){
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_detalhes_contato, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item){
switch(item.getItemId()){
case R.id.editar_contato:
Intent it = new Intent (DetalhesContato.this, AlterarContato.class);
it.putExtra("nome", nome);
it.putExtra("dia", dia);
it.putExtra("mes", mes);
it.putExtra("email", email);
it.putExtra("fone", fone);
it.putExtra("endereço", endereco);
it.putExtra("cidade", cidade);
it.putExtra("país", pais);
it.putExtra("imagem", imagem);
it.putExtra("indice", indice);
startActivity(it);
finish();
return true;
case R.id.apagar_contato:
//set up dialog
dialog = new Dialog(DetalhesContato.this);
dialog.setContentView(R.layout.apagar_contato_dialog_layout);
dialog.setTitle(" Excluir contato");
dialog.setCancelable(true);
Button buttonSim = (Button) dialog.findViewById(R.id.simBtn);
buttonSim.setOnClickListener(new BotaoSim());
Button buttonNao = (Button) dialog.findViewById(R.id.naoBtn);
buttonNao.setOnClickListener(new BotaoNao());
dialog.show();
return true;
case R.id.voltar:
Intent intento = new Intent (DetalhesContato.this, ListarContatos.class);
startActivity(intento);
finish();
return true;
default:
return false;
}
}
protected class BotaoNao implements OnClickListener {
public void onClick(View v) {
dialog.dismiss();
}
}
protected class BotaoSim implements OnClickListener {
public void onClick(View v) {
acoesBancoDados = new LerGravarExcluirScript(DetalhesContato.this);
contatos = acoesBancoDados.listarContatos();
//Recupera o objeto Contato que foi clicado:
objContato = contatos.get(indice);
Thread processoParalelo = new Thread(new RemoverContato());
processoParalelo.start();
chamaListaAtualizada();
}
}
protected class RemoverContato implements Runnable {
public void run() {
if (threadDone) {
acoesBancoDados = new LerGravarExcluirScript(DetalhesContato.this);
acoesBancoDados.apagarContato(objContato);
//Fecha o Banco de Dados
acoesBancoDados.fechar();
threadDone = false;
}
}
}
protected void chamaListaAtualizada() {
//Fecha o Banco de Dados
acoesBancoDados.fechar();
//Para não dar erro ao clicar no botão "sim" do Dialog
dialog.dismiss();
Toast.makeText(DetalhesContato.this, "Contato apagado com sucesso!", Toast.LENGTH_LONG).show();
Intent it = new Intent (this, ListarContatos.class);
startActivity(it);
finish();
}
}