このスレッドは少し古く、提案された修正を適用できませんでした(またはより良い修正を見つけることができませんでした)。ActionBarSherlock 4.2を使用していますが、オプションメニューがオーバーレイであるICSデバイスにサインインすると、まだ問題があります。サインインアクティビティが閉じた後でのみ、メニューを強制的に無効にする方法がわかりませんでした(アプリにはサインイン状態が変更されたと判断しました)。
メニューを無効にするフラグを使用して問題を解決しましたonResume
。フラグを使用するのはハックのように感じますが、履歴書ごとに無効にするよりはましです。
@Override
protected void onResume()
{
if ( checkLoginState == Boolean.TRUE )
{
invalidateOptionsMenu();
checkLoginState = Boolean.FALSE;
}
super.onResume();
}
次にonOptionsItemSelected
、フラグを設定します。
@Override
public boolean onOptionsItemSelected( MenuItem item )
{
// Handle item selection
switch ( item.getItemId() )
{
case R.id.actionbar_settings_signin_out:
if (isUserLoggedIn() == Boolean.TRUE )
{
logout();
validateOptionsMenu();
}
else
{
// set the flag so that on resume we update the options menu
checkLoginState = Boolean.TRUE;
startSignInActivity();
}
return true;
これは私にとってはうまくいっていますが、他の人がそれをより良い方法で解決したかどうか知りたいです。