azaghal Posted April 3, 2011 Share Posted April 3, 2011 Bonjour, voilà je débute la programmation sous android et un petit problème est venu perturber mon apprentissage ;) Voilà en fait j'ai un SubMenu avec des items checkables ainsi qu'un ContextMenu constitué des mêmes éléments checkables. J'aimerai faire en sorte que lorsque que je clique sur un item d'un de ces deux menus il soit coché. Or j'ai vu que les menus étaient crées "à la demande" donc j'ai mis en place un système pour que l'état soit conservé et configuré lors de la préparation du menu. Hélas ça ne marche pas: le menu ne se check pas après avoir cliqué dessus. J'ai cherché un bon bout de temps et maintenant que je suis à court d'idées je m'en remet à vous. Voiçi le code source de l'unique classe de mon application: ] package com.formation.menu; import android.app.Activity; import android.os.Bundle; import android.os.SystemClock; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.Menu; import android.view.MenuItem; import android.view.SubMenu; import android.view.View; import android.view.View.OnLongClickListener; import android.widget.LinearLayout; import android.widget.Toast; public class Main extends Activity implements OnLongClickListener { /** Called when the activity is first created. */ LinearLayout view; int checked1000=0; int checked1001=0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); view = ((LinearLayout)this.findViewById(R.id.view1)); view.setOnLongClickListener(this); view.setOnCreateContextMenuListener(this); } private void onCreateMenu(Menu menu){ SubMenu m = menu.addSubMenu(0, 2000, 0, "Sous menu 1"); m.add(0,1000,0,"Menu 1").setCheckable(true); m.add(0,1001,0,"Menu 2").setCheckable(true); m.setIcon(android.R.drawable.ic_menu_call); m.setHeaderIcon(android.R.drawable.ic_menu_agenda); } @Override public boolean onCreateOptionsMenu(Menu menu) { onCreateMenu(menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()){ case 1000: Toast.makeText(this,"Menu 1",1000).show(); if (item.isChecked()) { checked1000=1; } else { checked1000=0; } break; case 1001: Toast.makeText(this,"Menu 2",1000).show(); if (item.isChecked()) { checked1001=1; } else { checked1001=0; } break; } return super.onOptionsItemSelected(item); } @Override public boolean onPrepareOptionsMenu(Menu menu) { menu.findItem(2000).setTitle(""+SystemClock.elapsedRealtime()); if (checked1000==1) { menu.findItem(1000).setChecked(true); } else { menu.findItem(1000).setChecked(false); } if (checked1001==1) { menu.findItem(1001).setChecked(true); } else { menu.findItem(1001).setChecked(false); } return super.onPrepareOptionsMenu(menu); } public boolean onLongClick(View v) { v.showContextMenu(); return false; } @Override public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) { onCreateMenu(menu); super.onCreateContextMenu(menu, v, menuInfo); } @Override public boolean onContextItemSelected(MenuItem item) { switch(item.getItemId()){ case 1000: Toast.makeText(this,"Context Menu 1",1000).show(); if (item.isChecked()) { checked1000=1; } else { checked1000=0; } break; case 1001: Toast.makeText(this,"Context Menu 2",1000).show(); if (item.isChecked()) { checked1001=1; } else { checked1001=0; } break; } return super.onContextItemSelected(item); } } Je vous fourni aussi le projet à importer dans eclipse : Menus.zip Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.