Domanda

Sono nuovo di questo forum e allo sviluppo di Android in sé quindi la mia domanda sarà probabilmente molto stupido e mi scuso per questo. Ho cominciato a leggere la Guida Dev su developer.android.com e fino a quando la parte con il menu di contesto tutto ha funzionato abbastanza bene. Ora ho cercato di avere un menu contestuale con un sottomenu che contiene alcuni elementi verificabili. Così ho aggiunto il sottomenu e le voci al mio menu.xml e alcuni metodi item.setchecked (veri) per il mio metodo 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 del mio file 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);
   }
}
...

Ora il problema è che quando ho aperto il menu e premere una delle voci controllabili e posso vedere che il segno di spunta verde compare nella piccola scatola appena prima della chiusura del menu di contesto, ma quando ho aperto il menu di nuovo il segno di spunta è andato. Ora io non so davvero il motivo per cui il segno di spunta non rimane nella casella. Sarebbe bello se qualcuno potesse darmi suggerimento e dirmi che cosa sto facendo male. Ringraziandovi in ??anticipo

Jean-claude91

È stato utile?

Soluzione

Non ho provato io stesso, ma se leggo la descrizione qui correttamente (http://developer.android.com/reference/android/app/Activity.html#onCreateContextMenu(android.view.ContextMenu, android.view .Vedere, android.view.ContextMenu.ContextMenuInfo)), la risorsa layout verrà chiamato ogni volta che viene creato il menu. Dal momento che è "non è sicuro a cui aggrapparsi a un menu dopo che il metodo restituisce", si avrebbe bisogno di elaborare l'elemento selezionato e persistono che da qualche parte la selezione e quindi passare allo stato attuale delle voci selezionabili nel onCreate con menuInfo, ambiente controllato / incontrollato utilizzando queste informazioni.

Se non, quindi il menu verrà ricreato ogni volta in base alle impostazioni predefinite (menu.xml).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top