PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum Context Menu em ListView dentro de fragment #497341

10/10/2014

0

Bom dia a todos,
estou aprendendo sobre os fragment no Android, eu tinha um pequeno projeto para estudos e estou começando a migra-lo para o uso de fragments.



Em meu projeto somente com Activitys eu possuia uma ListView na tela onde a mesma possuía um ContextMenu em que o usuário segurava em uma posição e a mesma abrir um contextMenu com as opções de Alterar ou Excluir o item na posição desejada. Ao se escolher uma das opções o sistema entra no método onContextItemSelected(MenuItem item) e realiza a função indicada. Na Activity funcionava muito bem.

O que houve com esse método no Fragment?

Quando eu o executo dentro do Fragment ao invés de entrar no onContextItemSelected(MenuItem item) o sistema esta chamando o método onCreateOptionsMenu(Menu menu) que está na Activity que gerencia os meus Fragment.

Segue meu método no Fragment de Itens do Pedido.

/* Cria o as opções do Menu Context */
	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {

		if (v.getId() == R.id.lisItens) {

			String[] menuItens = getResources().getStringArray(
					R.array.menu_item);

			for (int i = 0; i < menuItens.length; i++) {
				menu.add(Menu.NONE, i, i, menuItens[i]);
			}
		}
	}

	/*
	 * Opções do contextMenu
	 */
	@Override
	public boolean onContextItemSelected(MenuItem item) {

		AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item
				.getMenuInfo();

		/* pegar a posição selecionada na ListView */
		final int posicao = info.position;

		switch (item.getItemId()) {
		case 0: // Editar Item

			Log.d("LoadSystem - AcPedido",
					"onContextItemSelected - Editar Item");

			startActivityForResult(
					new Intent(AcPedido_sw32.this, EditaQtdeProduto.class)
							.putExtra("pedido", pedido.getItens())
							.putExtra("produto",
									pedido.getItens().get(posicao).getProduto())
							.putExtra(
									"valorunitario",
									pedido.getItens().get(posicao)
											.getValorUnitario().doubleValue())
							.putExtra(
									"totalitem",
									pedido.getItens().get(posicao)
											.getValorTotal().doubleValue())
							.putExtra(
									"qtde",
									pedido.getItens().get(posicao).getQtde()
											.toString()), 4);

			break;

		case 1: // Excluir Item

			Log.d("LoadSystem - AcPedido",
					"onContextItemSelected - Excluir Item");

			AlertDialog.Builder builder = new AlertDialog.Builder(getActivity);

			builder.setMessage("Deseja realmente excluir esse item?")
					.setCancelable(false)
					.setPositiveButton("Sim",
							new DialogInterface.OnClickListener() {

								public void onClick(DialogInterface dialog,
										int which) {

									/*
									 * Codigo que remove o produto da lista de
									 * pedidos
									 */
									pedido.getItens().remove(posicao);

									mostraDados();
									setTotalPedido();
								}
							})
					.setNegativeButton("Não",
							new DialogInterface.OnClickListener() {

								public void onClick(DialogInterface dialog,
										int which) {
									dialog.cancel();
								}
							});

			AlertDialog alert = builder.create();
			alert.show();

		default:
			break;

		}

		return true;

	}


E abaixo meu método onCreateOptionsMenu(Menu menu) da Activity.

@Override
	public boolean onCreateOptionsMenu(Menu menu) {

		MenuItem salvar = menu.add(0, 0, 0, "Salvar");
		salvar.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
		salvar.setIcon(R.drawable.menu_salvar);

		MenuItem cancelar = menu.add(0, 1, 1, "Cancelar");
		cancelar.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
		cancelar.setIcon(R.drawable.menu_cancelar);

		MenuItem incluirItem = menu.add(0, 2, 2, "Incluir Item");
		incluirItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
		incluirItem.setIcon(R.drawable.menu_add);

		MenuItem alterarPedido = menu.add(0, 3, 3, "Alterar Pedido");
		alterarPedido.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
		alterarPedido.setIcon(R.drawable.menu_editar);

		MenuItem atualizarTabela1 = menu.add(0, 4, 4, "Atualizar Tabela 1");
		atualizarTabela1.setShowAsAction(MenuItem.SHOW_AS_ACTION_WITH_TEXT);
		// cancelar.setIcon(R.drawable.ic_error_envio);

		MenuItem atualizarTabela2 = menu.add(0, 3, 3, "Atualizar Tabela 2");
		atualizarTabela2.setShowAsAction(MenuItem.SHOW_AS_ACTION_WITH_TEXT);
		// cancelar.setIcon(R.drawable.ic_error_envio);

		return true;

	}

	@Override
	public boolean onMenuItemSelected(int featureId, MenuItem item) {

		switch (item.getItemId()) {

		case 0: /* Salvar */
			salvaPedido();

			break;

		case 1: /* cancelar */

			alertaCancelamentoPedido();

			break;

		case 2: /* incluirItem */
			incluiritem();
			break;
		case 3: /* alterarPedido */

			alterarPedido();

			break;

		case 4: /* atualizarTabela1 */
			
			atualizarTabela1();

			break;
		case 5: /* atualizarTabela2 */

			break;

		}

		return true;
	}


Quando o clique ocorre no noContext Menu ele procura o id no método da Activity e executa o método da Activity.


Não é mais usado o ContextMenu?

Minha implementação não está correta?

No Fragment a implementação é diferente?
Willian Amor

Willian Amor

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar