1 pièce(s) jointe(s)
Problème Débutant: Sous-menu et Context-menu
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:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
| 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 fournis aussi en pièce jointe le projet à importer dans eclipse.
Je vous fourni aussi le projet à importer dans eclipse :