Aller au contenu

Problème Débutant: Sous-Menu


azaghal

Recommended Posts

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

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...