は、私は頻繁に/無効のメニュー項目を有効にしてonPrepareOptionsMenuからそれらが見えるようです。メニュー項目は、アクションバー上で最も使用を示すために私のAndroid 2.xのアプリケーションの一部にshowAsActionメニュー属性:は、どのように私はアクションバーをリフレッシュすることができますか?私のアプリの中で
今日、私はアンドロイドを追加し始めました。
アクションバーはすぐに有効化/無効化と可視性を反映していません。この変更が起こるのを見るには、右のメニュードロップダウンをクリックする必要があります。
[OK]を、私はメニューがonPrepareOptionsMenuを発射することを理解してください。 ActionBarをリフレッシュするには何が必要ですか?この変更はonOptionsItemSelectedから適用する必要があると思いますが、私は何を呼び出すべきか分かりません。ここで
メニューです:
<item
android:icon="@drawable/ic_menu_mapmode"
android:id="@+id/men_mapview"
android:showAsAction="ifRoom|withText"
android:title="@string/txt_mapview" />
<item
android:icon="@drawable/ic_menu_mapmode"
android:id="@+id/men_satelliteview"
android:showAsAction="ifRoom|withText"
android:title="@string/txt_satelliteview" />
はここonPrepareOptionsMenuです:私はinvalidateOptionsMenuを追加した場合、これはAndroidの3で動作します:
@Override
public boolean onPrepareOptionsMenu(final Menu menu) {
MenuItem menuItemMapView = menu.findItem(R.id.men_mapview);
MenuItem menuItemSatelliteView = menu.findItem(R.id.men_satelliteview);
if (mapView.isSatellite()) {
menuItemMapView.setEnabled(true).setVisible(true);
menuItemmenuItemSatelliteView.setEnabled(false).setVisible(false);
} else {
menuItemMapView.setEnabled(false).setVisible(false);
menuItemmenuItemSatelliteView.setEnabled(true).setVisible(true);
}
return super.onPrepareOptionsMenu(menu);
}
ここonOptionsItemSelected
@Override
public boolean onOptionsItemSelected(final MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.men_mapview:
mapView.setSatellite(false);
mapView.setStreetView(true);
mapView.invalidate();
invalidateOptionsMenu(); // This works on Android 3.x devices only
return true;
case R.id.men_satelliteview:
mapView.setSatellite(true);
mapView.setStreetView(false);
mapView.invalidate();
invalidateOptionsMenu(); // This works on Android 3.x devices only
return true;
}
return super.onOptionsItemSelected(menuItem);
}
EDITです。 xアプリがクラッシュするAndroid 2.xデバイスは、メソッドが見つからないために見つかりませんでした。それを正しく行うための推奨される方法は何ですか?
あなたの答えと単純にバージョンCHECを置く間differnece何kの最初の呼び出しを囲むif(Build.VERSION.SDK_INT> = 11){invalidateOptionsMenu(); }? versionHelperメソッド呼び出しでバージョンチェックを張っている可能性がありますか? – topwik
@towpseヘルパークラスがそのまま構造化されている理由は、後方互換性がないためにクラッシュしないようにするためです。メソッド 'invalidateOptionsMenu()'は、API 11(ハニカム)以降にのみ存在します。あなたのアプリがAPI 11よりも低いもので動作するなら、クラッシュします。これを避けるには、問題のメソッドを別の** static **メソッド(例えば 'refreshActionBarMenu()')にラップし、** only ** API> 11で実行している場合はこの静的メソッドを呼び出します(バージョンチェック_before_あなたは静的メソッドを呼び出します)。これは 'VersionHelper'クラスが実際に使用されるまでロードされないために機能します。 –
@Turbo ok cool、説明のためにありがとう、だから、elseのケースでは何をするだろうか?ユーザーが古いOSを使用している場合は、メニューを更新しないでください。 – topwik