1

私のアプリケーションは起動時にWebサービスを呼び出し、ユーザーがログインしているかどうかを確認します。ログインしている場合は、ログアウトアイコンを表示する必要があります。ログインしていない場合は、ログインアイコンを表示する必要があります。アプリケーションのバージョンがログインをサポートしていない場合、アイコンを表示し続ける必要があります。ActionBarのアイコンを変更しています

Webサービスが返されたときにアイコンを表示するにはどうすればよいですか?私は2.3を使用しているのでinvalidateOptionsMenu()を呼び出すことはできません。また、onPrepareOptionsMenu()に追加しようとすると、ActionBarではなくメニューボタンを押すとメニューに表示されます。

私はアクションバーにメニュー項目を追加するには、このコードを使用し

答えて

0

/*************************************/ 
/* Create the actionbar options menu */ 
/*************************************/ 
@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    menu.add("Settings") 
      .setIcon(R.drawable.ic_menu_moreoverflow_normal_holo_light) 
      .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); 

    return true; 
} 

あなたは、私がこの類似した何かをやったそこにif文を追加し、

+0

フォームが表示されます。

この

は、XMLメニューがどのように見えるかだろう。アプリケーションのライフサイクル中の任意の時点でアイコンを変更できるようにする必要があります –

+0

ああ。私は誤解しました。 ActionBarに互換性ライブラリを使用していますか?もしそうなら、私はinvalidateOptionsMenu()がFragmentActivityを拡張すると利用できると思います。 – Tony

+0

私はFragmentActivityを拡張しています。 invalidateOptionsMenu()を呼び出すと、NoSuchMethodErrorが返されます –

1

accordingleyアイコンを変更することができるはずですway:

アクションバーのメニューでは、ログインとログアウトの両方の項目が既にあります(アイテムにIDを簡単に割り当てることができるように、コードに作成するのではなくXMLに入れておくことをおすすめします)。その後、メニューを作成するときにメニューの参照を保持するだけで、後で変更することができます。

あなたはユーザーがログインしている見つけるその後
Menu myActionBarMenu; 

/** 
* Creates action bar items. 
*/ 
@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.menuNameHere, menu); 
    myActionBarMenu = menu; 
} 

は、このような偽の項目に、ログの可視性を設定します。

myActionBarMenu.findItem(R.id.logInAction).setVisible(false); 
myActionBarMenu.findItem(R.id.logOutAction).setVisible(true); 
ユーザーがログアウトした場合には、視認性を逆に

。 onCreateOptionsMenu()が既に呼び出されているように、Webサービスが呼び出されている間、

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item 
     android:id="@+id/logInAction" 
     android:showAsAction="ifRoom" 
     android:title="Log In"/> 
    <item 
     android:id="@+id/logOutAction" 
     android:showAsAction="ifRoom" 
     android:title="Log Out"/> 
</menu> 
+0

myActionBarMenu.findItem(R.id.logInAction)を使用しているときにエラーが発生しました.setVisible(false); - > findItemはMenuItemを返し、setVisibleメソッドを持たないので! – user387184

+0

あなたが何を意味するか分かりません。 android.view.MenuItem(developer.android.com/reference/android/view/MenuItem.html#setVisible(boolean))のドキュメントを参照してください。 setVisibleはandroid.view.MenuItemのメソッドです。私は自分のプロジェクトでActionBarSherlockを使用していますが、それは対応するMenuItemのメソッドでもあります。 – Spencer

関連する問題