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

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?

Viva,

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

Segue um exemplo:

[code]
// 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”); [/code]

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

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.

Poderiam me ajudar nessa dúvida?

Alguém?

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

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.

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

É ao contrário:

Listar chama Vendas e passa o ID do Cliente

ListarProdutos chama Vendas e passa o ID do Produto.

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

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

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

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.

E?

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

Ta fazendo pra codigo.

[quote=fbrigatt]Como faço para a activity Vendas receber dois parametros? Que seria codigo e codigo2?

Ta fazendo pra codigo.[/quote]

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

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?

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

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.