Primeiramente gostaria de agradecer ao pessoal do Forum, me ajudaram muito , estou na fase final do meu projeto.
Agora minha duvida , tenho uma listView que carrega alguns dados de uma tabela (um produto), tipo “nome” , “preco” , “quantidade”.
Eu preciso dar um jeito do cliente deletar esse produto da tabela caso ele queira, como posso fazer isso?
Obrigado , abraços!
Cara, tu pode pegar o item da lista no evento onListItemClick da tua ListView e dentro deste método tu cria uma AlertDialog e tal e deleta ela.
Eras isso?
Sim era essa minha ideia, mas como faria isso?Obrigado
http://www.androidbrasilprojetos.org/android/basicao-sobre-adapters-para-listviews-e-spinners/
Essa é uma maneira. (So falta a parte do banco que imagino que saiba)
Amigo estou com um erro de logica ,
Codigo da minha listView
[code]carrinho.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int pos,
long id) {
codigopedido = pos;
}
}); [/code]
Metodo do banco:
[code] public void deletaPedido(){
try{
bancoDados = openOrCreateDatabase(“lanchonete”, MODE_WORLD_READABLE, null);
String sql = “DELETE FROM pedido WHERE _id = '”+codigopedido+"’";
bancoDados.execSQL(sql);
}catch (Exception e) {
// TODO: handle exception
Log.i("teste", "erro ao deletar produto :"+e);
}
}[/code]
chamo esse metodo ao clicar em um botao!
1 - Cara, aonde no onItemClick tu está chamando o deletaPedido()? Se estão na mesma activity (o que é errado), chama o deletaPedido passando o código do que quer deletar.
2 - Troca de String sql = "DELETE FROM pedido WHERE _id = '"+codigopedido+"'"; para String sql = "DELETE FROM pedido WHERE _id = "+codigopedido+"; pois tu tah colocando ’ e o _id é um Integer correto?
Da uma olhada nisso e avisa do resultado.
Assim ta dando erro
Mas o problema é que estou comparando a posicao com o meu codigo que sao coisas diferentes =X , eu precisava pegar o nome …
Tah certo. Foi mal, é assim: String sql = "DELETE FROM pedido WHERE _id = "+codigopedido;
No teu adapter tu busca essas informações do banco correto? Se for assim, pega usando algo como MeuObjeto meuObj = (MeuObjeto) l.getAdapter().getItem(position);
Dai tu vai ter o teu objeto ali, podendo passar o ID dele.
Agora se tu nao tah usando adapter, acho que tu pode fazer algo tipo assim dentro do teu onClick:
Nunca fiz isso, mas imagino que dai tu pode pegar qualquer item que esteja na tua lista, seja por nome ou outra coisa. Mas o ideal é criar o adapter certo como tinha colocado um link.
Meu adapter :
[code]public void carregaDados(){
try{
bancoDados = openOrCreateDatabase(“lanchonete”, MODE_WORLD_READABLE, null);
cursor = bancoDados.query(“pedido”, campos, null, null, null, null, null);
Log.i("TESTE", "SETOU VARIAVEIS ");
if(verificaRegistro()){
aaLista = new SimpleCursorAdapter(this, R.layout.mostradados, cursor, campos, new int[]{R.id.tvNome,R.id.tvPreco,R.id.tvQuantidade});
carrinho.setAdapter(aaLista);
Log.i("TESTE", "IMPRIME DADOS ");
}
else{
mensagemExibir("Voce nao comprou nada ainda!", "Compras");
startActivity(new Intent(carrinhoCompras.this,realizarPedido.class));
}
}catch (Exception e) {
// TODO: handle exception
Log.i("Teste", "Erro ao carregar dados: "+e);
}
finally
{
bancoDados.close();
}
}[/code]
Objeto:
[code]public class Paciente {
private Integer Id;
private String nome;
private String email;
private Date datanascimento;
private String sexo;
private String codPaciente;
private String senhaPaciente;
public Paciente(Integer id, String nome, String email,
Date datanascimento, String sexo, String codPaciente,
String senhaPaciente) {
this.Id = id;
this.nome = nome;
this.email = email;
this.datanascimento = datanascimento;
this.sexo = sexo;
this.codPaciente = codPaciente;
this.senhaPaciente = senhaPaciente;
}
public Paciente() {
}
public Integer getId() {
return Id;
}
public void setId(Integer id) {
Id = id;
}
//GetSetOmitidos[/code]
Adapter:
[code]ublic class PacienteAdapter extends BaseAdapter {
private Context ctx;
private List<Paciente> lista;
public PacienteAdapter(Context ctx, List<Paciente> lista) {
this.ctx = ctx;
this.lista = lista;
}
@Override
public int getCount() {
return lista.size();
}
@Override
public Object getItem(int position) {
return lista.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Paciente paciente = lista.get(position);
LayoutInflater layout = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = layout.inflate(com.android.diabetescontrol.activities.R.layout.listapaciente, null);
TextView txtID = (TextView)v.findViewById(com.android.diabetescontrol.activities.R.id.tvCod);
txtID.setText(paciente.getId().toString());
TextView txtNome = (TextView)v.findViewById(com.android.diabetescontrol.activities.R.id.tvPrinc);
txtNome.setText(paciente.getNome());
TextView txtEmail = (TextView)v.findViewById(com.android.diabetescontrol.activities.R.id.tvSec);
txtEmail.setText(paciente.getEmail());
return v;
}
}
[/code]
[code]<?xml version="1.0" encoding="utf-8"?>
<TextView
android:id="@+id/tvPrinc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/tvSec"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/tvPrinc"
android:text="Small Text"
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/tvCod"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/tvSec"
android:layout_centerHorizontal="true"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
[/code]
Como pego ele no OnClick
[code]public class ListaPacientesActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setListAdapter(new PacienteAdapter(this,
new PacientesBusiness().getPacientesDoMedico(this)));
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
Paciente paciente = (Paciente) l.getAdapter().getItem(position);
}
}[/code]
Eu não tenho uma classe base, como essa paciente , mas tudo bem , vou tentar por, obrigado pela ajuda.
E não querendo explorar mas tambem tenho outra duvida a minha ListView so aparece os dados do banco , por exemplo
Bauru
2.5
2
Eu gostaria que ficasse assim :
Nome : Bauru
Preço : 2.50
Quantidade : 2
Os dados do banco mais um texto antes =D.Obrigado pela ajuda , abraços
Ao invés de usar o simpleCursorAdapter usa o SimpleAdapter, que dai tu passa uma lista. So que é mais chato de montar.
Exemplo aqui: