Autore Topic: Context menu diverso per singoli item  (Letto 591 volte)

Offline ginoz

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    windows
Context menu diverso per singoli item
« il: 19 Maggio 2011, 10:39:43 CEST »
0
Ho una ListView costruita su un cursore, ogni riga ha un campo isActive, io vorrei che aprendo il Context Menu di una riga che ha isActive=true apparisse l'opzione disattiva e aprendo il Context Menu su una riga che ha isActive=false apparisse l'opzione attiva, ma non ho trovato un modo per fare context menu diversi per i vari item di una ListView. E' possibile?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Context menu diverso per singoli item
« Risposta #1 il: 19 Maggio 2011, 11:17:54 CEST »
0
Così su due piedi penso tu dovresti popolare il MENU in modo programmatico, cioè non con un XML, ma direttamente quando viene invocato.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline ginoz

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    windows
Re:Context menu diverso per singoli item
« Risposta #2 il: 19 Maggio 2011, 11:36:23 CEST »
0
Attualmente il menu lo creo semplicemente con

Codice (Java): [Seleziona]
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        menu.add(0, CTX_ATTIVA, 0, R.string.attiva);
        menu.add(0, CTX_DISATTIVA, 1, R.string.disattiva);
    }

Quello che mi serve è che una delle due voci non venga appunto mostrata

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Context menu diverso per singoli item
« Risposta #3 il: 19 Maggio 2011, 11:43:38 CEST »
+1
questo è il codice che ho usato io, in base al tipo di feed nella listview, vengono mostrate cose diverse:
Codice (Java): [Seleziona]
/** CONTEXT MENU FOR FEEDS **/
        @Override
        public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
                super.onCreateContextMenu(menu, v, menuInfo);
                AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
                populateMenu(menu, info.position);
                menu.setHeaderTitle("Feed " + feeds.get(info.position).getId());
        }

        @Override
        public boolean onContextItemSelected(MenuItem item) {
                AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
                switch (item.getItemId()) {
                        case R.id.cm_delete:
                                this.deleteResource((int) info.id);
                                return true;
                        case R.id.cm_postComment:
                                this.onPostRelatedResourceClick((int) info.id);
                                return true;
                        case R.id.cm_vote:
                                this.voteQuestion((int) info.id);
                                return true;
                        case R.id.cm_unvote:
                                this.unvoteQuestion((int) info.id);
                                return true;
                        case R.id.cm_viewMaterial:
                                Intent viewIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(((MaterialFeed) feeds.get((int) info.position)).getUrl()));
                                startActivity(viewIntent);
                                return true;
                        case R.id.cm_viewRelated:
                                this.viewRelatedPage((int) info.position);
                                return true;
                        default:
                                return super.onContextItemSelected(item);
                }
        }

        /**
         * Populate the context menu with respect to the type of feed
         *
         * @param menu
         *            The menu to populate
         * @param position
         *            The position in the ArrayList of Feeds of the selected item
         */

        public void populateMenu(ContextMenu menu, int position) {
                Feed temp = feeds.get(position);
                if (temp instanceof CommentFeed) populateMenuComment(menu, (CommentFeed) temp);
                else if (temp instanceof QuestionFeed) populateMenuQuestion(menu, (QuestionFeed) temp);
                else if (temp instanceof MaterialFeed) populateMenuMaterial(menu, (MaterialFeed) temp);
        }
// Question: can delete if editable, can vote if not voted, can unvote if voted
        public void populateMenuQuestion(ContextMenu menu, QuestionFeed feed) {
                menu.add(0, R.id.cm_viewRelated, 0, "View Answers");
                if (IcApplication.getInstance().hasSession()) {
                        menu.add(0, R.id.cm_postComment, 0, "Answer to Question");

                        if (!IcApplication.getInstance().itIsMe(feed.getAuthor())) {
                                if (feed.isVoted()) menu.add(0, R.id.cm_unvote, 0, "Remove my vote");
                                else menu.add(0, R.id.cm_vote, 0, "Vote Question");
                        }
                        if (feed.isEditable()) menu.add(0, R.id.cm_delete, 0, "Delete Question");
                }
        }

in pratica devi semplicemente crearti il menu a mano e non via xml, facendo il menu.add
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline ginoz

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    windows
Re:Context menu diverso per singoli item
« Risposta #4 il: 19 Maggio 2011, 14:42:24 CEST »
0
Perfetto grazie funziona  :-)