Pregunta

soy nuevo en este foro y al propio desarrollo de Android por lo que mi pregunta probablemente será una muy estúpida y me disculpo por ello. Empecé a leer la guía para programadores en developer.android.com y hasta que la parte con los menús contextuales todo funcionó bastante bien. Ahora he tratado de tener un menú contextual con un submenú que contiene algunos elementos comprobables. Por lo que añade el submenú y los artículos a mi menu.xml y algunos item.setchecked (verdaderos) métodos para mi método onContextItemSelected (...).

menu.xml

<?xml version="1.0" encoding="utf-8"?>  
  <menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/info"
        android:title="@string/info" />
    <item android:title="@string/change">
        <menu>
           <item android:id="@+id/checkable_item1"
               android:checked="true"
               android:checkable="true"
               android:title="@string/hello"/>
           <item android:id="@+id/checkable_item2"
               android:checkable="true"
               android:title="@string/moin"/>
           <item android:id="@+id/checkable_item3"
               android:checkable="true" 
               android:title="@string/aloha"/>
       </menu>
  </item>   
</menu>

parte de mi archivo .java

...
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
      ContextMenuInfo menuInfo)
{
   super.onCreateContextMenu(menu, v, menuInfo);
   MenuInflater inflater1 = getMenuInflater();
   inflater1.inflate(R.menu.context_menu, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item)
{
   switch(item.getItemId())
   {
   case R.id.checkable_item1:
      if(item.isChecked()) item.setChecked(false);
      else item.setChecked(true);
      return true;
   case R.id.checkable_item2:
      if(item.isChecked()) item.setChecked(false);
      else item.setChecked(true);
      return true;
   case R.id.checkable_item3:
      if(item.isChecked()) item.setChecked(false);
      else item.setChecked(true);
      return true;
   default:
      return super.onContextItemSelected(item);
   }
}
...

Ahora el problema es que cuando abro el menú y pulse uno de los elementos comprobables y puedo ver que la marca verde aparece en la pequeña caja justo antes de que se cierre el menú de contexto, pero cuando abro el menú de nuevo la garrapata se ha ido. Ahora no se sabe muy bien por qué la garrapata no se queda en la caja. Sería bueno si alguien me podría dar indirecta y me diga lo que estoy haciendo mal. agradeciendo de anticipación

jean-claude91

¿Fue útil?

Solución

No he probado a mí mismo, pero si leo la descripción aquí adecuadamente (http://developer.android.com/reference/android/app/Activity.html#onCreateContextMenu(android.view.ContextMenu, android.view .Ver, android.view.ContextMenu.ContextMenuInfo)), su recurso diseño será llamado cada vez que se crea el menú. Ya que de "no es seguro para aferrarse a un menú después se devuelve el método", lo que se necesita para procesar el elemento seleccionado y persistir que en algún lugar de selección y luego pasar el estado actual de los elementos seleccionables en el onCreate con menuInfo, configuración controlada / sin marcar el uso de esa información.

Si no, entonces el menú volverá a crear cada vez que en base a sus ajustes por defecto (menu.xml).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top