2013-02-10 3 views
0

Essayer de faire un peu de personnalisation à mon actionbar w/actionbar Sherlock ..vue personnalisée à la place de MenuItem.Icon() ActionBarSherlock

j'ai une vue personnalisée existante qui sur-manèges sur Draw, et se met à jour avec le Statut GPS basé sur la précision. Je veux que ce soit l'option de menu la plus droite disponible pour les utilisateurs. (Donc je pense que customView est sorti).

J'ai essayé de l'implémenter en tant que MenuItem sur la barre d'action, ce que j'ai réussi à faire, en étendant Drawable au lieu d'étendre une vue (ou ImageView).

Mon problème semble être w/extendable drawable, je ne peux pas invalider ma vue à actualiser, quand une précision GPS change. Je peux appeler invalidateSelf, et j'ai un écouteur Callback activé où invalider (Drawable who) est passé, mais si j'essaie de définir le who comme l'image mise à jour, rien ne se passe ..

Si je tape l'icône, il actualise les mises à jour & ..

Vous vous demandez s'il existe une meilleure solution que l'extension de l'étirage, ou si j'étire l'étirage, comment puis-je le faire mettre à jour dynamiquement sans intervention de l'utilisateur.

Répondre

1

S'il n'y a que quelques états distincts à afficher (peut-être 4 ou 5 icônes qui pourraient être regroupées avec votre application), je suggérerais simplement de mettre à jour vos options de menu dynamiquement pendant onPrepareOptionsMenu().

public boolean onPrepareOptionsMenu(Menu menu) { 
    MenuItem gpsStatus = menu.findItem(R.id.menu_gps); 

    // figure out which icon to show here 
    // int drawableId = R.drawable.ic_gps_accurate 

    gpsStatus.setIcon(drawableId); 
} 

Pour déclencher ce code, appelez simplement invalidateOptionsMenu(); Vous aurez probablement envie de sauvegarder l'état afin qu'il soit plus facile pour votre onPrepareOptionsMenu() de trouver la bonne icône.

private void onGPSStatusUpdated(int newStatus) { 
    mGPSStatus = newStatus; 
    invalidateOptionsMenu(); 
} 
Questions connexes