2014-01-08 4 views
0

3 개의 탭이있는 활동에 조각이 있습니다. 또한 ActionBar 항목이 3 개 있습니다. 각 탭에서 하나의 항목 만 표시되고 다른 항목은 오버플로 메뉴에 있어야합니다. 내 코드는 다음과 같습니다.변경 탭에서 ActionBar 항목의 가시성 변경

private void updateMenuItemsVisibility() 
{ 
    MenuItem itemAddGate = menu.findItem(R.id.action_add_gate); 
    MenuItem itemAddLinking = menu.findItem(R.id.action_new_linking); 
    MenuItem itemNewConversation = menu.findItem(R.id.action_new_conversation); 
    MenuItemCompat.setShowAsAction(itemNewConversation, 
      MenuItemCompat.SHOW_AS_ACTION_NEVER); 
    MenuItemCompat.setShowAsAction(itemAddLinking, MenuItemCompat.SHOW_AS_ACTION_NEVER); 
    MenuItemCompat.setShowAsAction(itemAddGate, MenuItemCompat.SHOW_AS_ACTION_NEVER); 
    if (viewPager.getCurrentItem() == 0) 
    { 
     MenuItemCompat.setShowAsAction(itemNewConversation, 
       MenuItemCompat.SHOW_AS_ACTION_ALWAYS); 
    } 
    if (viewPager.getCurrentItem() == 1) 
    { 
     MenuItemCompat.setShowAsAction(itemAddLinking, MenuItemCompat.SHOW_AS_ACTION_ALWAYS); 
    } 
    if (viewPager.getCurrentItem() == 2) 
    { 
     MenuItemCompat.setShowAsAction(itemAddGate, MenuItemCompat.SHOW_AS_ACTION_ALWAYS); 
    } 
} 

그리고이 코드는 Android 4.x에서 작동합니다. 숨어있는 2.1 줄에서 작동하지 않는 것 같습니다. 탭을 두 번째 탭으로 변경하면 두 번째 항목이 세 번째 항목에 나타납니다. 이전 탭으로 전환해도 항목이 숨겨지지 않습니다. ActionBarCompat를 사용하고 있습니다. 그게 버그 야?

편집 : 실제로 Android 4.1에서 CyanogenMod를 실행하는 Samsung Galaxy S (첫 번째)에서도 이와 같이 작동합니다. 그래서 우리는 소프트웨어 키 대신에 물리적 인 버튼이있을 때 상황에 연결될 수 있습니다.

답변

1

저는 아직 확실하지 않습니다. 문제는 해당 API 일 수 있습니다. < 11 액션 바가 아직 구현되지 않았으므로 SHOW_AS_ACTION_ALWAYS을 모릅니다.

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:yourapp="http://schemas.android.com/apk/res-auto"> 
    <item 
     android:id="@+id/new_sms" 
     android:title="@string/create_sms" 
     android:orderInCategory="1" 
     android:showAsAction="always" 
     yourapp:showAsAction="always" 
     android:icon="@drawable/arrow_right" /> 
</menu> 

의 선 에 xmlns :이처럼 메뉴에 코드의 2 개 개의 추가 라인을 추가해야 할 이유

yourapp = "http://schemas.android.com/apk/res- auto "yourapp : showAsAction ="always " 아이콘이 항상 표시되도록 할 수 있습니다. API 7-10의 경우에도 마찬가지입니다. 그렇지 않으면 오버플로 메뉴에 메뉴 항목이 나타납니다.

프로그래밍 방식으로 구현하는 방법을 잘 모르겠지만 그와 같은 3 가지 메뉴 소스를 작성하고 onSupportInvalidateOptionsMenu()을 호출하면 조각에 자체 메뉴가 표시됩니다. 이렇게하면 'onCreate()'이라는 부분에 setHasOptionsMenu(true)으로 전화하는 것을 잊지 마십시오.

+0

3 개의 xml을 작성하지 않고 onOptionsItemSelected()를 3 곳에서 처리하는 것을 피하고 싶었습니다. 그러나이 작업은 저에게 맞기 때문에 답변을 수락 할 것입니다. 고맙습니다. –