Autore Topic: Problema ContextMenu  (Letto 588 volte)

Offline Matteo87

  • Utente junior
  • **
  • Post: 52
  • Respect: 0
    • Mostra profilo
Problema ContextMenu
« il: 30 Dicembre 2011, 14:03:18 CET »
0
Tramite questo codice creo una listView, su cui poi voglio richiamare un ContextMenu. Il problema è che il context menu si apre correttamente, ma non riesco in nessun modo ad ottenere un riferimento alla view che ho cliccato.

Codice (Java): [Seleziona]
         
                 ArrayAdapter<CustomItem> arrayAdapter = new ArrayAdapter<CustomItem>(  // Creiamo l'ArrayAdapter
                                this, R.layout.custom_row_my_resources,  items) {
                                        @Override
                                        public View getView(int position, View convertView, ViewGroup parent){ 
                                                // Caso di utilizzo dell'Holdedr
                                                return getViewHolder(position,convertView,parent);  }

                        public View getViewHolder(int position, View convertView, ViewGroup parent) {
                               
                                ViewHolder viewHolder = null; // Creiamo il riferimento all'holder

                                // Se non presente una istanza della View la creiamo attraverso inflating. Se gia presente la riutilizziamo
                                if(convertView==null){
                                        // Otteniamo il riferimento alla View da parserizzare
                                        LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                                        convertView = inflater.inflate(R.layout.custom_row_my_resources, null);
                                        viewHolder = new ViewHolder(); // Creiamo un Holder associato
                                       
                                        // Assegnamo i riferimenti alle textView
                                        viewHolder.fileView = (TextView)convertView.findViewById(R.id.nameResourceFile);
                                        viewHolder.imageResources = (ImageView)convertView.findViewById(R.id.resourceType);
                                        //viewHolder.toggleButton = (ToggleButton)convertView.findViewById(R.id.toggleButtonMyResources);

                                        // Lo assegnamo come Tag della View
                                        convertView.setTag(viewHolder);
                                       
                                }//if
                                else{ viewHolder = (ViewHolder)convertView.getTag(); }  // La View esiste gia' per cui possiede gia' l'holder
                               
                                final CustomItem item = getItem(position);      // Otteniamo l'elemento i-esimo
                                // Assegnamo i valori
                                viewHolder.fileView.setText(item.nameFile); //setto valore label:valore

                                assegnaIcona(viewHolder,item); //assegna l'icona in base al tipo di file
                               
                                registerForContextMenu(viewHolder.fileView);

                               
                               
                                // Ritorniamo la View
                                return convertView;
                        }                      

                };
                // Lo impostiamo come adapter della listView
                setListAdapter(arrayAdapter);
                //registerForContextMenu(getListView());


Il codice che crea il Context menu è il seguente, ma l'oggetto AdapterContextMenuInfo adapterMenuInfo = (AdapterContextMenuInfo) menuInfo è null e quindi ovviamente si blocca tutto.

Codice (Java): [Seleziona]
@Override
        public void onCreateContextMenu(ContextMenu menu, View v,
                        ContextMenuInfo menuInfo) {
                // Sappiamo che le View provengono da una specializzazione di
                // AdapterView per cui eseguiamo il caso della MenuInfo
                AdapterContextMenuInfo adapterMenuInfo = (AdapterContextMenuInfo) menuInfo;
                // Otteniamo le informazioni relative alla View peralimentare il men˘
                // contestuale. Nello specifico vediamo se l'indice Ë pari o dispari
                // Otteniamo il riferimento alla View selezionata che nel nostro caso
                // Ë una TextView
                TextView selectedView = (TextView) adapterMenuInfo.targetView;
                CharSequence value = selectedView.getText();
                // Identificatore dell'item
                int itemId = Menu.FIRST;
                System.out.println("***********"+adapterMenuInfo.id);
                if ((adapterMenuInfo.id % 2) == 0) {// pari
                        // L'icona viene ignorata in un context menu
                        menu.add(0, itemId, itemId++, "Aggiorna " + value).setIcon(
                                        R.drawable.icon);
                        // Impostiamo l'header
                        menu.setHeaderTitle(R.string.even_title);
                } else { // dispari
                        // L'icona viene ignorata in un context menu
                        menu.add(0, itemId, itemId++, "Sostituisci " + value).setIcon(
                                        R.drawable.icon);
                        // Impostiamo l'header
                        menu.setHeaderTitle(R.string.odd_title);
                }
                // Aggiungiamo un comando comune
                menu.add(0, itemId, itemId++, "Cancella " + value);
                // Testiamo l'aggiunta di un Sottomenu
                SubMenu subMenu = menu.addSubMenu(1, itemId, itemId++, "SottoMenu");
                subMenu.add(1, itemId, itemId++, "SottoMenu 1").setCheckable(true);
                subMenu.add(1, itemId, itemId++, "SottoMenu 2").setCheckable(true);
                subMenu.add(2, itemId, itemId++, "SottoMenu 3");
                subMenu.add(3, itemId, itemId++, "SottoMenu 4");
                subMenu.add(3, itemId, itemId++, "SottoMenu 5");
                subMenu.setGroupCheckable(3, true, true);
                // Impostiamo l'icona dell'intestazione del menu
                menu.setHeaderIcon(R.drawable.icon);
        }