Receber mais de um parâmetro em uma única Activity

41 respostas
F

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?

41 Respostas

M

Viva,

Podes enviar os parâmetros que quiseres via Intent, penso que não existe limite.

Segue um exemplo:

// Activity Lista:
Intent it = new Intent(getBaseContext(), Vendas.class);  
it.putExtra("codigo", idItem);
it.putExtra("produto", nome_produto);    
startActivity(it); 


// Activity Venda:
Intent it = getIntent();  
int id = it.getIntExtra.getInt("codigo");
String produto = it.getIntExtra.getString("produto");
F

mejaime

Eu fiz assim. Na Activity ListarProduto:

@Override
	public boolean onContextItemSelected(MenuItem item){
		AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo )item.getMenuInfo();
		
		idItem = lista_produto.get(info.position).getId();
		
		if(item.getItemId() == MENU_VENDA){
			Intent it2 = new Intent(getBaseContext(), Vendas.class);
			it2.putExtra("codigo2", idItem);
			startActivity(it2);
		}
		return super.onContextItemSelected(item);
	}

Na Activity Venda eu fiz assim:

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();  
		}

Tenho duas listas:

Activity Listar - clientes
Activity ListarProduto - produtos

F

Estou com uma dúvida:

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

Poderiam me ajudar nessa dúvida?

F

Alguém?

A

Olá
Explica melhor, quantas activities você tem e quem chama quem com que parâmetros Extras?

F

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

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

É ao contrário:

Listar chama Vendas e passa o ID do Cliente

ListarProdutos chama Vendas e passa o ID do Produto.

A

Ok. Coloca dois parametros, tipo “codigo1” e “codigo2”. Um ou outro vai estar 0, dependendo de quem chamou.

F

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

else if(item.getItemId() == MENU_VENDA){
			Intent it = new Intent(getBaseContext(), Vendas.class);
			it.putExtra("codigo", idItem);
			startActivity(it);
			
//			Toast.makeText(getBaseContext(), "Venda em desenvolvimento, aguarde!", Toast.LENGTH_LONG).show();
		}
//		ClienteDAO dao = new ClienteDAO(getBaseContext());
//		dao.fecha_banco();
		return super.onContextItemSelected(item);

ListarProdutos: Listar Produtos

@Override
	public boolean onContextItemSelected(MenuItem item){
		AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo )item.getMenuInfo();
		
		idItem = lista_produto.get(info.position).getId();
		
		if(item.getItemId() == MENU_VENDA){
			Intent it2 = new Intent(getBaseContext(), Vendas.class);
			it2.putExtra("codigo2", idItem);
			startActivity(it2);
			
			//Toast.makeText(getBaseContext(), "Venda em desenvolvimento, aguarde!", Toast.LENGTH_LONG).show();
		}
		return super.onContextItemSelected(item);
	}
A

E em Vendas verifica se tem codigo ou codigo2.
Como você vai preencher o(s) outro(s) dados?

F

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

E?

F

Como faço para a activity Vendas receber dois parametros? Que seria codigo e codigo2?

Ta fazendo pra codigo.

A

fbrigatt:
Como faço para a activity Vendas receber dois parametros? Que seria codigo e codigo2?

Ta fazendo pra codigo.

it.putExtra(“codigo”, idItem);
it2.putExtra(“codigo2”, idItem);

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

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

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

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

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

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

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

Como seria com startActivityForResult?

F

Me ajuda, to parado nisso desde sexta.

A

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

Vou pesquisar. Quando tiver um tempo, vc posta um exemplo simples disso? Por favor?

A

Veja esses links:



tópico - Return a Result

F

Ok, vou ver. Qdo tiver um tempo, vc posta um exemplo simples aqui? Pode ser? To assistindo uma video-aula que aborda isso.

A

Ainda não resolveu?
Que material de estudo está usando?

F

Tava vendo uma aula do Neri. Ainda não resolvi.

M

Você já tentou colocar dois parametros no Intent?

intent.putExtra("param1", "8");
intent.putExtra("param2", "18");

E ler os dois na segunda Activity?

String param1 = getIntent().getStringExtra("param1");
String param2 = getIntent().getStringExtra("param2");

?

F

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

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();  
		}
F

Deu certo desse jeito ai Marky.

Fiz assim na Activity ListarProduto;

idItem = lista_produto.get(info.position).getId();
		

		
		if(item.getItemId() == MENU_VENDA){
			Intent it = new Intent(getBaseContext(), Vendas.class);
			it.putExtra("param2", "18");  
			//it.putExtra("codigo2", idItem);
			startActivity(it);

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

O seu pedido vai ter apenas um produto ou poderá ter mais de um?

F

pode ter mais de um. Mas vou salvar um de cada vez.

A

Então imagino que em Vendas você terá um ListView para mostrar os itens do pedido?

F

sim, mas ainda não fiz isso, estou fazendo gravar os produtos para o cliente. Entendeu?

A

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

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.

A

Passei os links, os exemplos estão lá

Criado 15 de setembro de 2013
Ultima resposta 16 de set. de 2013
Respostas 41
Participantes 4