0

ActionbarSherlockを使用してActionbarをカスタマイズしようとしています。

Drawを上書きし、精度に基づいてGPSステータスで更新する既存のカスタムビューがあります。

ユーザーが利用できる最も適切なメニューオプションとして使用したいと思います。(だから私はcustomViewが出ていると信じています)。

ビュー(またはImageView)を拡張する代わりに、Drawableを拡張することで、これをアクションバーのMenuItemとして実装しようとしましたが、これは正常に実行できました。

私の問題はドローアブルの拡張にあるようです。GPSの精度が変わったときに、ビューを無効にして更新することはできません。invalidateSelfを呼び出すことができ、invalidate(Drawable who)が渡されるコールバックリスナーを有効にしていますが、whoを更新された画像として設定しようとしても、何も起こりません。

アイコンをタップすると、更新&更新されます。

ドローアブルを拡張するよりも優れたソリューションがあるかどうか、またはドローアブルを拡張する場合、ユーザー入力なしで動的に更新するにはどうすればよいか疑問に思います。

4

1 に答える 1

1

表示する明確な状態がわずかしかない場合(おそらく、アプリにバンドルできる4つまたは5つのアイコン)、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);
}

このコードをトリガーするには、invalidateOptionsMenu();を呼び出すだけです。onPrepareOptionsMenu()が正しいアイコンをすばやく簡単に見つけられるように、状態を保存することをお勧めします。

private void onGPSStatusUpdated(int newStatus) {
    mGPSStatus = newStatus;
    invalidateOptionsMenu();
}
于 2013-02-11T17:06:17.523 に答える