Context Menu em ListView dentro de fragment
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.
E abaixo meu método onCreateOptionsMenu(Menu menu) da Activity.
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?
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
Curtidas 0