En essayant de suivre les directives de conception Android, je me heurte à un petit dilemme.
Je souhaite disposer d'une liste d'éléments que je peux appuyer longuement sur plusieurs (sélection multiple), puis effectuer des actions en bloc sur ceux-ci.
Les directives de conception suggèrent l’utilisation de la barre d’action contextuelle, ce qui correspond parfaitement à ce que j’avais en tête. Le problème, c'est que j'essaie de maintenir la compatibilité avec API 7 à l'envers (car mon téléphone est actuellement 2.3.3).
J'utilise ActionBarSherlock pour obtenir d'autres éléments de la barre d'action, mais je n'arrive pas à comprendre comment l'obtenir pour déclencher une barre d'action contextuelle, ni savoir ajouter des boutons de manière arbitraire à la barre d'action. en ABS. Je vois que vous pouvez faire des onglets, alors c'est peut-être la solution, mais comme j'essaie d'autoriser la sélection multiple, je ne veux pas avoir le menu contextuel modal normal.
La configuration de la barre d’action contextuelle est identique à celle des éléments ActionBar «normaux» en ce qui concerne le code XML. Cet exemple dans le guide du développeur explique tout .
Pour utiliser ActionBarSherlock, remplacez les rappels Android par défaut par les rappels modifiés par ActionBarSherlock (par exemple, au lieu de Android.View.ActionMode
, utilisez com.actionbarsherlock.view.ActionMode
).
C'est une réponse tardive, mais je pense que cela aiderait les gens bloqués.
Ouvrir la barre d’action contextuelle est en fait assez simple. À tout moment de votre activité, vous devez simplement appeler:
startActionMode(mActionModeCallback);
Si vous n’êtes pas dans votre activité principale, comme dans les fragments, vous pouvez obtenir une référence avec
getSherlockActivity().startActionMode(mActionModeCallback);
et c'est le rappel
private ActionMode.Callback mActionModeCallback = new ActionMode.Callback(){
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.actionbar_context_menu, menu);
return true;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_item1:
return true;
case R.id.menu_item2:
//close the action mode
//mode.finish();
return true;
default:
mode.finish();
return false;
}
}
};
Le XML est un menu simple comme celui de la barre d’action:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:id="@+id/menu_item1"
Android:icon="@drawable/ic_item1"
Android:title="@string/ITEM1"
Android:showAsAction="always|withText" />
<item Android:id="@+id/menu_item2"
Android:icon="@drawable/ic_item2"
Android:title="@string/ITEM2"
Android:showAsAction="always|withText" />
ActionBarSherlock a sa propre implémentation d'ActionMode, mais vous devrez contrôler manuellement son cycle de vie, j'ai écrit un tutorial à ce sujet.
Pour un long clic, veuillez vous référer aux liens ci-dessous. Le premier est le code Java requis pour l'échantillon. Et deuxièmement, comment définir la mise en page;
Je faisais face au même problème. Il a été résolu lorsque j'ai trouvé ce lien . Fondamentalement, vous devez créer une classe de rappel qui implémente ActionMode.Callback
. Dans cette classe, vous gonflez la barre d’action avec votre barre d’action contextuelle. À chaque sélection (ou clic long), vous démarrez le rappel à l'aide de la méthode startActionMode
. Voir le lien pour un code de travail =]
EDIT: Il y a aussi un exemple sur les échantillons de Sherlock sous /samples/demos/src/com/actionbarsherlock/sample/demos/ActionModes.Java
Je vais répondre à la deuxième partie de votre question. Voici un exemple pour ajouter une actionbar à une instance de View (bouton dans le code ci-dessous) avec la bibliothèque ActionBarSherlock:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
refreshButton = (RotatingButton) LayoutInflater.from(this).inflate(R.layout.actionbar_customview_refresh, null);
refreshButton.setOnClickListener(refreshButtonListener);
MenuItem item = menu.add(0, Android.R.id.copy, 0, getString(R.string.actionbar_refresh));
item.setActionView(refreshButton);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity_action_bar, menu);
}