Ajouter le bouton à bascule vers le menu pour arrêter et démarrer le service
Je suis en train de permettre à l'utilisateur d'arrêts et de départs de service dont je suis la mise en œuvre à partir du Menu où le texte sera changé quand il clique donc je veux ajouter ToggleButton
comme option dans le menu outil, mais rien n'est afficher dans mon cas maintenant. Comment puis-je résoudre ce problème?
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<ToggleButton
android:id="@+id/toggle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textOff="Off"
android:textOn="On" />
</menu>
MainActivity:
public class MainActivity extends ActionBarActivity {
ToggleButton tButton;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.toggle:
tButton = (ToggleButton) findViewById(R.id.toggle);
tButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (((ToggleButton) v).isChecked()) {
Intent i = new Intent(MainActivity.this,
TrackingService.class);
startService(i);
System.out.println("test is checked, start service");
} else {
//Stop the service when the Menu button clicks.
Intent i = new Intent(MainActivity.this,
TrackingService.class);
stopService(i);
System.out.println("test is NOT checked, stop service");
}
}
});
return true;
default:
return false;
}
}
}
Edit:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.checkable_menu:
if (isChecked = !item.isChecked()) {
item.setChecked(isChecked);
Intent i = new Intent(this, TrackingService.class);
startService(i);
System.out.println("test if onOptionsItemSelected");
} else {
Intent i = new Intent(this, TrackingService.class);
stopService(i);
System.out.println("test else onOptionsItemSelected");
}
return true;
default:
System.out
.println("test default onOptionsItemSelected was invoked.");
return false;
}
}
Je ne pense pas que vous pourriez ajouter un togglebutton dans le menu
OriginalL'auteur The Time | 2015-07-14
Vous devez vous connecter pour publier un commentaire.
Comme mentionné ci-dessus, vous ne pouvez pas ajouter le bouton à bascule vers le menu. Vous pouvez utiliser le
android:checkable
propriété dans votre élément de menu pour gérer les deux états.Quelque chose comme:
Menu:
Activité:
PS: Copié le code de ici.
Ou vous pouvez simplement mettre à jour votre article icône cliquez sur l'événement pour montrer les deux états avec
item.setIcon(yourDrawable));
java.lang.NullPointerException: Attempt to invoke interface method 'android.view.MenuItem android.view.MenuItem.setChecked(boolean)' on a null object reference
Vérifiez votre "menu.xml", vous devez avoir un élément checkable_menu" comme id
puis-je utiliser dans le si condtion dans ce wasy
if (item.isChecked()) {}else{}
au lieu deisChecked = !item.isChecked(); item.setChecked(isChecked);
?Oui, mais n'oubliez pas de mettre à jour isChecked variable et de l'élément.setChecked(newValue); à l'intérieur du if et ELSE.
S'il vous plaît pouvez-vous prendre un coup d'oeil à mon modifier le code. Comment puis-je définir la case cochée par défaut?
OriginalL'auteur Rami
Trop réponse tardive!
C'est facile. Plutôt, vous aurez votre bouton à bascule sur la Barre d'outils.
Et c'est votre show_protected_switch.xml mise en page.
Et dans le code:
Sortie!
Il est plutôt grand, mais vous pouvez ajuster sa taille, évidemment
n'était pas le cas des OP intention de mettre un interrupteur à bascule dans le menu déroulant?
OriginalL'auteur Faizan Mubasher
Je sais que c'est très long temps de poster une réponse, mais il peut aider quelqu'un 🙂
J'ai suivi ce lien et mise à jour de certains de la mise en œuvre de la solution que l'application a été écrasé avant ces modifications
Et ci-dessous est la solution complète:
1 - Créer un nouveau fichier xml de mise en page de dossier et nommez-le switch_layout.xml et de mettre le ci-dessous:
2 - Ajouter le dessous de l'élément de menu dans le main.xml fichier sous menu dossier:
3 - Accédez à votre activité et au-dessous de est une mise en œuvre intégrale de la méthode onCreateOptionsMenu:
OriginalL'auteur Vattic
Vous ne pouvez pas mettre n'importe quel widget dans
<menu>
et espérer qu'il fonctionne. Ce que vous pouvez mettre n'est documenté ici et c'est essentiellement limitée au menu<item>
et<group>
. Pas de boutons, des barrettes et autres widgets sont pris en charge. Si ce serait suffisant, vous pouvez utiliserandroid:checkable
sur le<item>
ou de l'utilisation old-skool approche et de modifier l'élément de menu en fonction de l'état (si le service est activé, votre article devrait lireturn service off
et vice versa).OriginalL'auteur Marcin Orlowski
Dans le menu xml vous ajoutez des éléments à ne pas les widgets (pas de boutons/textviews etc)
Il vous suffit de spécifier un ID et une ICÔNE pour l'élément, puis gonflez-les dans vos activités onCreateOptionsMenu() la méthode.
puis il y a une méthode onOptionsItemSelected(MenuItem item) vérifier les points suivants id contre l'id de votre attend.
Si son correspond à votre bascule de l'option de service de déterminer l'état du service et de modifier, si vous voulez avoir un bouton de fonction, vous pouvez utiliser l'élément.setIcon(drawable) ici.
OriginalL'auteur Hughzi
Ressources de Menu sont distincts conventionnelles mises en page; vous ne pouvez pas simplement ajouter des widgets en eux et de s'attendre à travailler. Les seuls éléments autorisés à l'intérieur d'une ressource de menu est
<item>
ou<group>
.À l'aide d'une mise en page personnalisée à l'intérieur d'un menu n'est pas possible, je le crains. Vous pouvez, au contraire, veulent remplacer l'ensemble du menu avec un PopupWindow, et fournir à votre dispositions il y la place.
Vous souhaitez mai à envisager deux solutions:
OriginalL'auteur Paul Lammertsma