2012-03-18 14 views
7

Sé que esta pregunta se realizó con anterioridad y la respuesta fue anular onPrepareContextMenu()/onCreateContextMenu(). Pero no entendí y no encontré ninguna solución para eso. Por favor, ayúdenme a desactivar el menú contextual para determinados artículos ListView.cómo deshabilitar el menú contextual para determinados elementos ListView en Android

+0

anule onPrepareContextMenu() y verifique que la posición actual de la lista seleccionada tenga un indicador booleano para eliminar todos los elementos del menú = ganar. – Blundell

+0

puede ser más específico sobre esto, quiero decir que necesito un código de muestra para entenderlo claramente. No puedo entender cómo eliminar todos los elementos del menú para un elemento de lista ESPECÍFICO. –

Respuesta

5

La apertura de su menú contextual depende de su lógica. Por ejemplo, en el método onItemClick (en su listView) debe verificar el contenido de su elemento y mostrar o no mostrar el menú contextual. No entiendo, ¿por qué es un problema para ti?

ACTUALIZACIÓN

public class ExampleActivity extends ListActivity { 

    private ListView mListView; 
    private ArrayList<String> mList = new ArrayList<String>(); 
    private ArrayAdapter<String> mArrayAdapter; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     mArrayAdapter = new ArrayAdapter<String>(this, android.R.id.list ,mList); 
     mListView = (ListView) findViewById(android.R.id.list); 
     setListAdapter(mArrayAdapter); 
     registerForContextMenu(mListView); 

     mListView.setOnItemLongClickListener(new OnItemLongClickListener() { 

      @Override 
      public boolean onItemLongClick(AdapterView<?> adapterView , View v,int position, long id) { 
       mListView.getItemAtPosition(position); //check current item with your logic and show or don't show contextMenu 
       // for example I will show 
       mListView.showContextMenu(); //to show 
       return true; 
      } 
     }); 
    } 

    @Override 
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
     // add contextmenu items 
     super.onCreateContextMenu(menu, v, menuInfo); 
    } 

    @Override 
    public boolean onContextItemSelected(MenuItem item) { 
     // todo some logic... 
     return super.onContextItemSelected(item); 
    } 

}

Puede ser que le ayudará a ... buena suerte ...

+0

En onCreate(), estoy registrando mi vista de lista con registerForContextMenu (listview) .Y en onListItemClick (ListView l, View v, int position, long id), cómo se supone que debo habilitar/deshabilitar para un elemento de lista particular. Supongamos que toma el primer artículo en ListView. Cómo se supone que debo escribir ese código habilitar/deshabilitar después de esto - listview.getItemAtPosition (0). ? –

+0

su contextMenu se mostrará cuando llame al método showContextMenu(). Verificará su artículo, y si necesita mostrar contextMenu llamará a showContextMenu() y de otra manera no lo llamará. ¿Cuál es el problema? –

+0

En el método onListItemClick (ListView l, View v, int position, long id) hay un parámetro de "posición int". Es la posición de su elemento actual al que se hace clic. Verifica item por getItemAtPosition (int position) y haces algo ... –

1

También puede volver a registrar su vista de lista que hará que su método de onCreateContextMenu a ejecutar de nuevo

ListView lv = (ListView) findViewById(R.id.lvExample); 
registerForContextMenu(lv); 

Y luego puede ocultar o mostrar los elementos del menú con wh ich cualquier lógica que desee en el onCreateContextMenu método

+0

Compro esto. No creo que estropear con 'OnItemLongClickListener' es una buena idea. – Yeung

Cuestiones relacionadas