Saltar para conteúdo


Foto
- - - - -

Passar Vals de um contextmenu item para uma intent!urgente!!


  • Por favor inicie sessão para responder
18 respostas a este tópico

#1 Lemur

Lemur

    Novato

  • Membros
  • Pip
  • 8 mensagens

Mensagem publicada 19 February 2011 - 16:56

Boa Tarde,Eu neste momento tou a fazer uma aplicação para android, ela ja tem algumas funcionalidades.Só que estou para num problema, que estou farto de pesquisar mas n sei aplica-lo no meu código!Penso que para quem percebe é bastante facil!O que pretendo realizar é:Quando seleciono um item de uma listview com um long press aparece um Context Menu;um dos butoes desse context menu é um editar!eu quero abrir uma nova Activity apartir de um intent.Só que eu não sei como ei de passar estes valores nem como manipula-los mais tarde na nova classe!@Override public void onCreateContextMenu(ContextMenu menu,View v,ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); MenuItem item = null; menu.setHeaderTitle("Selected Project"); menu.add(0, DEL, Menu.NONE, R.string.remove); menu.add(0, EDIT, Menu.NONE, R.string.edit).setIntent(new Intent(PM_List.this,PM_Task_List.class)); menu.add(0, TASK_LIST, Menu.NONE, R.string.task).setIntent(new Intent(PM_List.this,PM_Task_List.class)); menu.add(0, CANCEL, Menu.NONE, R.string.cancel); }este a o codigo do context menu, os itens estao guardados numa base de dados; e eu quero enviar o valor contido na coluna KEY_ID (nome "_id")alguem me pode ajudar no como passar este valor e como manipular a data mais tarde?pfv e muito importante, e eu como me encontro em erasmus não tenho ninguem que me possa ajudar!CumprimentosLemzz

#2 PJFonseca

PJFonseca

    Mestre de Android

  • Former Staff
  • PipPipPipPipPipPip
  • 2562 mensagens
  • OnePlus 2

Mensagem publicada 20 February 2011 - 11:11

Deixa-me lá chamar os experts da coisa: Ó Veloso... Ó R3pek...

#3 Lemur

Lemur

    Novato

  • Membros
  • Pip
  • 8 mensagens

Mensagem publicada 20 February 2011 - 16:18

Obrigado, se der para ajudar agradecia imenso!

#4 maxado

maxado

    Fã de Android

  • Membros
  • PipPipPip
  • 389 mensagens

Mensagem publicada 20 February 2011 - 16:46

Se percebi o que querias é so fazer isto:Depois de criares o intent e antes de iniciares a actividade.intent.putExtra("Nome que quiseres", obj); Na nova actividadeTipo x = (Tipo)getIntent().getSerializableExtra("Nome que quiseres");Se forem objectos tens de ter em atenção se são serialized, e a outro modo que não me lembro. Mas pelo que percebi é um String por isso não tens de te preocupar com isso.

#5 Lemur

Lemur

    Novato

  • Membros
  • Pip
  • 8 mensagens

Mensagem publicada 20 February 2011 - 20:28

Tipo, mas como passo o id, eu selecciono o obj dessa view como selecciono o id que esta na base de dados desse objecto?é isso que me anda a comer a cabeça.mas vou aui experimentar esse codigo e ja digo algo.de resto o valor que quero passar e um inteiro que esta na base de dados, como ja referi, vou dando noticias!se continuar o problema eu posto!e mais tarde irei postar ai a aplicação :P

#6 maxado

maxado

    Fã de Android

  • Membros
  • PipPipPip
  • 389 mensagens

Mensagem publicada 20 February 2011 - 20:37

Tens de arranjar uma associação entre o valor na bd e o no context menu, isso fazes como preferires, tens várias maneiras, uma delas é criar um arraylist de objectos que formem esse par. É uma hipótese....mas tens muitas maneiras de fazer isso...

#7 Lemur

Lemur

    Novato

  • Membros
  • Pip
  • 8 mensagens

Mensagem publicada 20 February 2011 - 21:03

Já implementei, mas agora corre mas n ta a conseguir gerar o context menu da logo erro e crasha o programa!:Ptenho isto assim:AdapterView.AdapterContextMenuInfo menuInf = null; menuInfo =(AdapterView.AdapterContextMenuInfo)item.getMenuInfo(); Intent intent = new Intent(PM_List.this,PM_Edit.class); long index = menuInf.position; index = proItems.size()-index;//da o id do projecto intent.putExtra("index", index); menu.add(0, EDIT, Menu.NONE, R.string.edit).setIntent(intent);no outro intent tenho: Long x = (Long)getIntent().getSerializableExtra("index"); ex = PMDBAdapter.getProjItem(x);//ex e do tipo projobjects nameTV.setText(ex.getName());eu depois na outra classe xamo um getObjct k me devolve um objecto e apartir dele passo para as views, mas este codigo ta mal n sei pk :sserá do serialazable que fala?cumprimentos

#8 r3pek

r3pek

    Guru de Android

  • Former Staff
  • PipPipPipPipPip
  • 1560 mensagens
  • LocalizaçãoBA4 - Terceira - Açores
  • Nexus One + Motorola XOOM

Mensagem publicada 20 February 2011 - 21:04

o ideal é no onLongPress da listview, actualizares uma variável global, que depois no onPrepareContextMenu actualizas o intent com esse valor que queres. O nome dos métodos não sei se é mesmo este mas não deve falhar muito.

#9 maxado

maxado

    Fã de Android

  • Membros
  • PipPipPip
  • 389 mensagens

Mensagem publicada 20 February 2011 - 21:22

Já implementei mas agora corre mas n ta a conseguir gerar o context menu da logo erro e crasha o programa!:Ptenho isto assim:AdapterView.AdapterContextMenuInfo menuInf = null; menuInfo =(AdapterView.AdapterContextMenuInfo)item.getMenuInfo(); Intent intent = new Intent(PM_List.this,PM_Edit.class); long index = menuInf.position; index = proItems.size()-index;//da o id do projecto intent.putExtra("index", index); menu.add(0, EDIT, Menu.NONE, R.string.edit).setIntent(intent);no outro intent tenho: Long x = (Long)getIntent().getSerializableExtra("index"); ex = PMDBAdapter.getProjItem(x);//ex e do tipo projobjects nameTV.setText(ex.getName());eu depois na outra classe xamo um getObjct k me devolve um objecto e apartir dele passo para as views, mas este codigo ta mal n sei pk :sserá do serialazable que fala?cumprimentos

Não tem a ver com o ser serializado, que erro é que dá?

#10 Lemur

Lemur

    Novato

  • Membros
  • Pip
  • 8 mensagens

Mensagem publicada 20 February 2011 - 21:24

crasha o programa, nem cria o context menu.mas se tirar o codigo entra no intent e tal, claro k sem valores.opa n percebo msm pk

#11 maxado

maxado

    Fã de Android

  • Membros
  • PipPipPip
  • 389 mensagens

Mensagem publicada 20 February 2011 - 21:27

Sem o código todo não te consigo dizer porquê, no entanto tu consegues ver porquê, sabes usar o ddms?

#12 Lemur

Lemur

    Novato

  • Membros
  • Pip
  • 8 mensagens

Mensagem publicada 20 February 2011 - 22:35

usar para ver o erro nao.no debbug n identifica

#13 maxado

maxado

    Fã de Android

  • Membros
  • PipPipPip
  • 389 mensagens

Mensagem publicada 21 February 2011 - 13:52

No ecrã de log, aparece o que vai acontecendo, e quando o programa te dá force close aparece lá a vermelho o motivo.

#14 Lemur

Lemur

    Novato

  • Membros
  • Pip
  • 8 mensagens

Mensagem publicada 21 February 2011 - 16:56

Ok, o erro que deu foi este:[attachment=2014]ps.png[/attachment]

#15 pedronveloso

pedronveloso

    Veloso

  • Administradores
  • 1578 mensagens
  • S8

Mensagem publicada 21 February 2011 - 20:26

Estás a obter um NPE, isso podem ser muitas coisas. Coloca no pastebin o código todo dessas 2 Activities para podermos ver melhor o que se passa.

#16 Lemur

Lemur

    Novato

  • Membros
  • Pip
  • 8 mensagens

Mensagem publicada 21 February 2011 - 22:04

ok,ja submeti no pastebintão aqui os links:Classe onde esta a Listview:http://pastebin.com/7NrHEELxClasse onde vai ser manipulada a data:http://pastebin.com/RGsJaWSz

#17 ppires

ppires

    Membro

  • Membros
  • PipPip
  • 120 mensagens

Mensagem publicada 23 February 2011 - 12:52

tantos NPEs...basta olhar para o snippet q o Lemur postou para perceber que está a chamar objectos que ele próprio setta a null :-/

#18 ppires

ppires

    Membro

  • Membros
  • PipPip
  • 120 mensagens

Mensagem publicada 23 February 2011 - 13:03

tu queres algo tipo:[code type=javascript]@Overridepublic void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { menu.setHeaderTitle("Selected Project"); menu.add(0, DEL, Menu.NONE, R.string.remove); // define menu item MenuItem menuEdit = menu.add(0, EDIT, Menu.NONE, R.string.edit); // define intent Intent editIntent = new Intent(PM_List.this, PM_Edit.class); // pass row ID or project name or whatever.. editIntent.putExtra("rowId", new Long(1)); // set intent to menu item menuEdit.setIntent(editIntent);[/code]new Long(1) é só um exemplo dum rowId. deverás colocar o correspondente ao item que queres editar. no entanto, se os nomes forem únicos, podes lá ir mais rapidamente p'lo nome... enfim, tens muitas soluções!no editIntent, só tens de ler a variável como referido num post anterior e ir buscar à bd, et voilá :-)

#19 ppires

ppires

    Membro

  • Membros
  • PipPip
  • 120 mensagens

Mensagem publicada 23 February 2011 - 13:07

AFAIK, "PM_List.this" pode ser substituído simplesmente por "this".