Autore Topic: Problema con scelta dinamica bottoni in Contextual Action Bar  (Letto 529 volte)

Offline rafanto

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Google+
    • rafanto
    • rafanto
    • rafanto
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Sistema operativo:
    Linux Ubuntu 12.10 + Ubuntu 13.04 + Fedora 18
Problema con scelta dinamica bottoni in Contextual Action Bar
« il: 10 Giugno 2013, 16:53:32 CEST »
0
Salve, nella mia applicazione ho una serie di activity che hanno delle listview che vengono popolate da contenuti del db e tramite adapter caricate.
Su ogni riga io con l'evento (longClick) faccio attivare il Contextual Action Bar con dei bottoni per le azioni ad esempio delete, edit etc..

il mio problema sta nel fatto che io vorrei gesire dinamicamente il caricamento di alcuni bottoni, per spiegarmi meglio alcune righe riferite ad esempio all'utente loggato non devono avere nella Contextual Action Bar il bottone della prenotazione ad esempio .. le altre si .. il confronto lo potrei fare tramite un campo utente della riga e la confronterei tramite un campo in locale ma non so come gestire il Contextual Action Bar e i bottoni associati dato che carico il layout del menù uguale sempre per tutte le righe

grazie in anticipo

Offline rs94

  • Utente normale
  • ***
  • Post: 227
  • Respect: +21
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson Xperia Arc S
  • Sistema operativo:
    Windows 8
Re:Problema con scelta dinamica bottoni in Contextual Action Bar
« Risposta #1 il: 10 Giugno 2013, 17:19:30 CEST »
0
Posta il codice con cui inizializzi la contextual actionbar
L'unica certezza è il dubbio.
Dubitare di se stessi è il primo segno di intelligenza.

Offline rafanto

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Google+
    • rafanto
    • rafanto
    • rafanto
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Sistema operativo:
    Linux Ubuntu 12.10 + Ubuntu 13.04 + Fedora 18
Re:Problema con scelta dinamica bottoni in Contextual Action Bar
« Risposta #2 il: 10 Giugno 2013, 17:25:43 CEST »
0
Codice (Java): [Seleziona]
       

/* Gestione evento long click */
               
                OnItemLongClickListener clickListenerL = new OnItemLongClickListener() {

                        public boolean onItemLongClick(AdapterView<?> parent, View v,
                                        int pos, long id) {

                                if (mActionMode != null) {
                                        return false;
                                }

                                offerta = gson.fromJson(parent.getItemAtPosition(pos)
                                                .toString(), Offerta.class);
                               
                                selectedItem = offerta.getIdOfferta();
                               
                                selectedItemUser = offerta.getFkUtente();

                                // Start the CAB using the ActionMode.Callback defined above
                                mActionMode = ListaOfferte.this.startActionMode(mActionModeCallback);
                                v.setSelected(true);
                                return true;
                        }

                };

                myListView.setOnItemLongClickListener(clickListenerL);
               
        }
       
        private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {

                // Called when the action mode is created; startActionMode() was called
                public boolean onCreateActionMode(ActionMode mode, Menu menu) {
                        // Inflate a menu resource providing context menu items

                                MenuInflater inflater = mode.getMenuInflater();
                                inflater.inflate(R.menu.lista_offerte_utente, menu);   

                        return true;
                }

                // Called each time the action mode is shown. Always called after
                // onCreateActionMode, but
                // may be called multiple times if the mode is invalidated.
                public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
                        return false; // Return false if nothing is done
                }

                // Called when the user selects a contextual menu item
                public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
                       
                        switch (item.getItemId()) {
                       
                        case R.id.action_delete_offer: 
                                deleteOffer(selectedItem);
                                mode.finish();
                                return true;

                        case R.id.action_edit_offer:
                                modificaOfferta(selectedItem);
                                mode.finish();
                                return true;
                               
                        case R.id.action_prenota_offer:
                                createReservation(selectedItem);
                                mode.finish();
                                return true;

                        default:
                                return false;
                        }
                }

                // Called when the user exits the action mode
                public void onDestroyActionMode(ActionMode mode) {
                        mActionMode = null;
                        selectedItem = -1;
                }
        };

il menu contestuale mi funziona e anche le azioni ma non so come ho detto prima fare una cosa dinamica che mi scelga i bottoni in base alla riga

Post unito: 10 Giugno 2013, 18:15:54 CEST
Ragazzi forse ho risolto in questo modo ma non so se sia la migliore soluzione o se esiste qualche metodo builtIN che mi consenta di fare il caricamento dinamico e contestuale dei bottoni per differenti tipologie di righe

Codice (Java): [Seleziona]
                /* Gestione evento long click */
               
                OnItemLongClickListener clickListenerL = new OnItemLongClickListener() {

                        public boolean onItemLongClick(AdapterView<?> parent, View v,
                                        int pos, long id) {

                                if (mActionMode != null) {
                                        return false;
                                }

                                offerta = gson.fromJson(parent.getItemAtPosition(pos)
                                                .toString(), Offerta.class);
                               
                                selectedItem = offerta.getIdOfferta();
                               
                                selectedItemUser = offerta.getFkUtente();

                                // Start the CAB using the ActionMode.Callback defined above
                                mActionMode = ListaOfferte.this.startActionMode(mActionModeCallback);
                                v.setSelected(true);
                                return true;
                        }

                };

                myListView.setOnItemLongClickListener(clickListenerL);
               
        }
       
        private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {

                // Called when the action mode is created; startActionMode() was called
                public boolean onCreateActionMode(ActionMode mode, Menu menu) {
                        // Inflate a menu resource providing context menu items
                       
                        if (USER.equals(selectedItemUser)){
                               
                                MenuInflater inflater = mode.getMenuInflater();
                                inflater.inflate(R.menu.lista_offerte_utente_no_res, menu);
                        }
                        else {
                               
                                MenuInflater inflater = mode.getMenuInflater();
                                inflater.inflate(R.menu.lista_offerte_utente, menu);   
                        }
                       
                        return true;
                }

praticamente ho usato un "accrocco" mio .. mi valorizzo una variabile con l'user dell'utente loggato che mi recupero con una chiamata dal token e poi la confronto con un'altra variabile (quella dell'utente presente nella riga) e faccio un cambio di layout menu ..

Codice (Java): [Seleziona]
        if (USER.equals(selectedItemUser)){
                               
                                MenuInflater inflater = mode.getMenuInflater();
                                inflater.inflate(R.menu.lista_offerte_utente_no_res, menu);
                        }
                        else {
                               
                                MenuInflater inflater = mode.getMenuInflater();
                                inflater.inflate(R.menu.lista_offerte_utente, menu);   
                        }

Siccome vorrei imparare e sono curioso di scoprire nuove cose sul mondo android se c'è qualcuno più esperto di me per piacere mi segnali come approcciare questo problema ..

Saluti
« Ultima modifica: 10 Giugno 2013, 18:17:22 CEST da rafanto, Reason: edit contenuto »