Receber mais de um parâmetro em uma única Activity
41 respostas
F
fbrigatt
Meus amigos, preciso receber numa Activity mais de um parâmetro.
Eu to fazendo assim:
Passagem: Aqui é a Activity Lista
Intent it = new Intent(getBaseContext(), Vendas.class);
it.putExtra("codigo", idItem);
startActivity(it);
Recebimento: Aqui é a Activity Venda
Intent it = getIntent();
ID = it.getIntExtra("codigo", 1);
int parametro = ID;
if (parametro != 0) {
final ClienteDAO dao = new ClienteDAO(getBaseContext());
final ClienteVO vo = dao.getById(ID);
IdCliente = (TextView) findViewById(R.id.IdCliente);
lblNomeCliente = (TextView) findViewById(R.id.lblNomeCliente);
IdCliente.setText(vo.getId().toString());
lblNomeCliente.setText(vo.getRazaosocial_nome());
Toast.makeText(getBaseContext(), "Cliente com valor" + ID, Toast.LENGTH_LONG).show();
}
Como faço para que a Activity Venda receba o ID e o Produto vindo da Activity ListarProduto?
Intent it = getIntent();
ID = it.getIntExtra("codigo", 1); // Aqui é para o nome do Cliente. O ID ja declarei como private int ID = 0.
if (it != null){
int msg = it.getIntExtra("codigo",1);
Toast.makeText(getBaseContext(), "Valor ID Cliente " + msg, Toast.LENGTH_LONG).show();
}
Quando entro na lista de clientes, seleciono um cliente da lista e mando pra tela de Vendas, funciona, perfeito. Se adicionar mais um para o produto na tela Vendas, não irá dar um erro pois estará esperando um produto da lista de produtos? Vou ter dois parâmetros na tela Vendas que vão vir de duas telas diferentes.
F
fbrigatt
Poderiam me ajudar nessa dúvida?
F
fbrigatt
Alguém?
A
A_H_Gusukuma
Olá
Explica melhor, quantas activities você tem e quem chama quem com que parâmetros Extras?
F
fbrigatt
Ok, tenho 3 Activities.
Primeira: Lista
Segunda: ListarProduto
Terceira: Vendas
A primeira eu listo os Clientes e mando para a Vendas.
A segunda listo os Produtos e quero mandar o código para Vendas
A terceira seria a Vendas, que receberia o ID de Clientes (Listar) e ID do Prouduto (ListarProduto)
Lista e ListarProduto chamam Vendas.
A
A_H_Gusukuma
Se entendi, está funcionando assim: em vendas você chama ListarProdutos e quer pegar o retorno, é isso?
Se for, é só chamar com startActivityForResult e pegar o retorno no onActivityResult
F
fbrigatt
É ao contrário:
Listar chama Vendas e passa o ID do Cliente
ListarProdutos chama Vendas e passa o ID do Produto.
A
A_H_Gusukuma
Ok. Coloca dois parametros, tipo “codigo1” e “codigo2”. Um ou outro vai estar 0, dependendo de quem chamou.
F
fbrigatt
Fiz assim:
Clientes it.putExtra(“codigo”, idItem); Esse é de Clientes
it2.putExtra(“codigo2”, idItem); Esse é de Produtos
Listar -> Listar Clientes . Mesmo método para ListarProduto
elseif(item.getItemId()==MENU_VENDA){Intentit=newIntent(getBaseContext(),Vendas.class);it.putExtra("codigo",idItem);startActivity(it);//Toast.makeText(getBaseContext(),"Venda em desenvolvimento, aguarde!",Toast.LENGTH_LONG).show();}//ClienteDAOdao=newClienteDAO(getBaseContext());//dao.fecha_banco();returnsuper.onContextItemSelected(item);
ListarProdutos: Listar Produtos
@OverridepublicbooleanonContextItemSelected(MenuItemitem){AdapterView.AdapterContextMenuInfoinfo=(AdapterView.AdapterContextMenuInfo)item.getMenuInfo();idItem=lista_produto.get(info.position).getId();if(item.getItemId()==MENU_VENDA){Intentit2=newIntent(getBaseContext(),Vendas.class);it2.putExtra("codigo2",idItem);startActivity(it2);//Toast.makeText(getBaseContext(),"Venda em desenvolvimento, aguarde!",Toast.LENGTH_LONG).show();}returnsuper.onContextItemSelected(item);}
A
A_H_Gusukuma
E em Vendas verifica se tem codigo ou codigo2.
Como você vai preencher o(s) outro(s) dados?
F
fbrigatt
Em vendas faço isso:
Intent it = getIntent();
ID = it.getIntExtra("codigo", 1);
if (it != null){
int msg = it.getIntExtra("codigo",1);
Toast.makeText(getBaseContext(), "Valor ID Cliente " + msg, Toast.LENGTH_LONG).show();
}
Esse recupera o Cliente.
A
A_H_Gusukuma
E?
F
fbrigatt
Como faço para a activity Vendas receber dois parametros? Que seria codigo e codigo2?
Ta fazendo pra codigo.
A
A_H_Gusukuma
fbrigatt:
Como faço para a activity Vendas receber dois parametros? Que seria codigo e codigo2?
Do jeito que está, vai receber somente um parâmetro, dependendo da activity que deu o start em Vendas.
Você precisa rever o design da sua app
F
fbrigatt
Uai, como faço então, são duas Listas:
Lista de Clientes e Lista de Produtos.
Preciso selecionar o Cliente para gerar uma venda e o produto que o cliente comprou.
O que você sugere para corrigir isso?
As duas não tem que chamar a tela de Vendas?
F
fbrigatt
Assim ta certo se fizesse;
Intent it = getIntent();
ID = it.getIntExtra("codigo", 1);
if (it != null){
int msg = it.getIntExtra("codigo",1);
Toast.makeText(getBaseContext(), "Valor ID Cliente " + msg, Toast.LENGTH_LONG).show();
}
Intent it2 = getIntent();
ID = it2.getIntExtra("codigo2", 1);
if (it2 != null){
int msg = it2.getIntExtra("codigo",1);
Toast.makeText(getBaseContext(), "Valor ID Produto " + msg, Toast.LENGTH_LONG).show();
}
A
A_H_Gusukuma
Você tem que definir como vai ser a navegação entre as telas do seu app. Do jeito que está não fecha.
Você pode, por exemplo, começar pela Lista de Clientes, selecionar um, chamar Vendas, em vendas colocar um botão Adicionar Produto, chamar Produtos, selecionar produto, retornar para Vendas…
Ou, outras alternativas, mas tem que ser funcional.
F
fbrigatt
Fiz isso. Coloquei na tela de Vendas um botão que chama a tela de Produtos. O problema está na hora de retornar o parâmetro.
A
A_H_Gusukuma
fbrigatt:
Fiz isso. Coloquei na tela de Vendas um botão que chama a tela de Produtos. O problema está na hora de retornar o parâmetro.
Chama com startActivityForResult, implementa o onActivityResult e coloca o setResult na activity dos produtos
F
fbrigatt
Seria assim:
Intent it = getIntent();
ID = it.getIntExtra("codigo", 1);
if (it != null){
int msg = it.getIntExtra("codigo",1);
Toast.makeText(getBaseContext(), "Valor ID Cliente " + msg, Toast.LENGTH_LONG).show();
}
Intent it2 = getIntent();
ID = it2.getIntExtra("codigo2", 1);
if (it2 != null){
int msg = it2.getIntExtra("codigo2",1);
Toast.makeText(getBaseContext(), "Valor ID Produto " + msg, Toast.LENGTH_LONG).show();
}
F
fbrigatt
Como seria com startActivityForResult?
F
fbrigatt
Me ajuda, to parado nisso desde sexta.
A
A_H_Gusukuma
Amigo, dá uma procurada que tem vários exemplos, dá uma boa estudada para entender o conceito.
Estou sem condições de postar um exemplo agora.
F
fbrigatt
Vou pesquisar. Quando tiver um tempo, vc posta um exemplo simples disso? Por favor?
A
A_H_Gusukuma
Veja esses links:
tópico - Return a Result
F
fbrigatt
Ok, vou ver. Qdo tiver um tempo, vc posta um exemplo simples aqui? Pode ser? To assistindo uma video-aula que aborda isso.
A
A_H_Gusukuma
Ainda não resolveu?
Que material de estudo está usando?
São Activities diferentes para enviar e uma para receber.
Vc viu como to fazendo? Postei aqui.
Um ja ta funcionando, falta só mais um que seria o produto, vou tentar fazer isso que vc disse agora na ListarProduto de teste. Ja posto o resultado.
F
fbrigatt
Eu recebo os parametros assim:
Intent it = getIntent();
ID = it.getIntExtra("codigo", 1);
if (it != null){
int msg = it.getIntExtra("codigo",1);
Toast.makeText(getBaseContext(), "Valor ID Cliente " + msg, Toast.LENGTH_LONG).show();
}
Eu coloquei um botão na Activity Vendas e quando chama a ListarProdutos, seleciono um item, mostra 18 e não o item que selecionei na lista.
A
A_H_Gusukuma
O seu pedido vai ter apenas um produto ou poderá ter mais de um?
F
fbrigatt
pode ter mais de um. Mas vou salvar um de cada vez.
A
A_H_Gusukuma
Então imagino que em Vendas você terá um ListView para mostrar os itens do pedido?
F
fbrigatt
sim, mas ainda não fiz isso, estou fazendo gravar os produtos para o cliente. Entendeu?
A
A_H_Gusukuma
Sem implementar o “…ForResult” fica difícil.
Se não conhece o mecanismo, fica mais difícil.
Ou arruma algum material decente sobre o Android, ou, a sua app vai demorar muito para sair.
F
fbrigatt
Tem como dar um help? Posta um exemplo simples que me viro. Sei que ele trabalha com requestCode, RESULT_OK, me passa um exemplo simples disso.