1

내 응용 프로그램이 시작할 때 웹 서비스를 호출하여 사용자가 로그인했는지 확인합니다. 로그인 한 경우 로그 아웃 아이콘을 표시해야합니다. 로그인하지 않은 경우 로그인 아이콘이 표시되어야합니다. 응용 프로그램의 해당 버전이 로그인을 지원하지 않으면 아이콘이 계속 나타나야합니다.ActionBar의 아이콘 변경 문제

웹 서비스가 반환 될 때 아이콘을 표시하려면 어떻게해야합니까? 2.3을 사용하기 때문에 invalidateOptionsMenu()를 호출 할 수 없습니다. 또한 onPrepareOptionsMenu()에 추가하려고하면 ActionBar 대신 메뉴 버튼을 누를 때 메뉴에 표시됩니다.

/*************************************/ 
/* 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; 
} 

당신은

답변

0

는 나는 액션 바 메뉴 항목을 추가하려면이 코드를 사용 방법 :

작업 표시 줄 메뉴에서 이미 로그인 및 로그 아웃 항목을 모두 가지고 있습니다 (항목에 ID를 쉽게 할당 할 수 있도록 코드에 작성하는 대신 XML에 넣는 것이 좋습니다). 그런 다음 나중에 메뉴를 수정할 수 있도록 메뉴를 참조하기 만하면됩니다. 그런 다음

Menu myActionBarMenu; 

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

, 사용자는 다음과 같이 false로 항목에서 로그의 가시성을 설정, 로그인 한 찾을 때

myActionBarMenu.findItem(R.id.logInAction).setVisible(false); 
myActionBarMenu.findItem(R.id.logOutAction).setVisible(true); 
은 사용자가 로그 아웃되는 경우 가시성을 역

. 의 onCreateOptionsMenu()가 이미 호출 된 있도록 웹 서비스가 호출되는 동안

<?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

양식 표시 :

은 XML 메뉴은 다음과 같은 형태가 될 것이다 될 것이다. 응용 프로그램의 수명주기 동안 언제든지 아이콘을 변경할 수 있어야합니다. –

+0

아 좋아요. 나는 오해했다. ActionBar 용 호환성 라이브러리를 사용하고 있습니까? 그렇다면 FragmentActivity를 확장하면 invalidateOptionsMenu()를 사용할 수 있다고 생각합니다. – Tony

+0

FragmentActivity를 확장하려고합니다. invalidateOptionsMenu()를 호출 할 때 NoSuchMethodError가 발생합니다. –

1

accordingley 아이콘을 거기에 if 문을 추가하고 변경할 수 있어야합니다 나는이 비슷한 일을했습니다

+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