2014-01-15 1 views
1

우리는 ActionBar를 응용 프로그램에서 사용합니다. 여기에는 아이콘이있는 여러 메뉴 항목이 있습니다. 그 중 하나는 오른쪽 상단의 "도움말"입니다. 일부 항목이있는 하위 메뉴가 있습니다. 사용자가 메뉴 항목을 길게 누르면 ActionBar에 도구 설명이 표시됩니다. 또한 Android 4.4에서 사용자가 하위 메뉴가있는 메뉴 항목을 클릭하고 손가락을 아래로 슬라이드하면 하위 메뉴가 확장됩니다.긴 클릭 후 Actionbar 메뉴 항목이 Android 4.4에서 작동하지 않습니다.

잠시 동안 사용자에게 툴팁과 확장 하위 메뉴가 표시됩니다. 문제는 하위 메뉴 항목 중 하나를 클릭 한 후 루트 메뉴 항목이 더 이상 작동하지 않아 하위 메뉴가 확장되지 않고 강조 표시되지 않는다는 것입니다. 그러나 ActionBar의 다른 메뉴 항목은 여전히 ​​작동합니다. Android의 ActionBar 구현에서 버그 인 것 같습니다. 툴팁과 서브 메뉴 모두 Android 4.4에서 새로운 애니메이션 효과를 얻었으므로 어쩌면 일부 동시성 문제가 발생할 수 있습니다.

현재 모든 대안을 찾고 있습니다. 어떤 도움을 주시면 감사하겠습니다.

메뉴 xml 선언.

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item 
     android:id="@+id/rate" 
     android:icon="@drawable/rate_button_bg" 
     android:title="@string/menu_rate_title" 
     android:showAsAction="always" /> 

    <item 
     android:id="@+id/like" 
     android:icon="@drawable/like_button_bg" 
     android:title="@string/menu_like_title" 
     android:showAsAction="always" /> 

    <item 
     android:id="@+id/share" 
     android:icon="@drawable/share_button_bg" 
     android:title="@string/menu_share_title" 
     android:showAsAction="always" /> 

    <item 
     android:id="@+id/help" 
     android:icon="@drawable/global_icon_help" 
     android:title="@string/menu_help_title" 
     android:showAsAction="always"> 
     <menu> 
      <item 
       android:id="@+id/item_quick_start" 
       android:showAsAction="always" 
       android:title="@string/quick_start_tour_text" /> 

      <item 
       android:id="@+id/item_faq" 
       android:showAsAction="always" 
       android:title="@string/frequently_asked_questions_text" /> 

      <item 
       android:id="@+id/item_help" 
       android:showAsAction="always" 
       android:title="@string/contact_customer_support_text" /> 

     </menu> 
    </item> 

</menu> 

메뉴를 만듭니다

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_home, menu); 
    return true; 
} 

프로세스를 클릭 :

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (R.id.item_quick_start == item.getItemId()) { 
     // do some stuff 
     return true; 
    } else if (R.id.item_faq == item.getItemId()) { 
     // do some stuff    
     return true; 
     ... 
    } else { 
     // Default value 
     return super.onOptionsItemSelected(item); 
    } 
} 
+0

ur 코드는 ur 문제를 이해하는 데 도움이 될 것입니다. – keshav

답변

0

찾을 해결 방법을. 내가 invalidateOptionsMenu()를 호출하면; 메뉴 항목은 계속 작동합니다.

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (R.id.item_quick_start == item.getItemId()) { 
     // do some stuff 
     invalidateOptionsMenu(); 
     return true; 
    } else if (R.id.item_faq == item.getItemId()) { 
     // do some stuff    
     invalidateOptionsMenu(); 
     return true; 
     ... 
    } else { 
     // Default value 
     return super.onOptionsItemSelected(item); 
    } 
} 
+0

나를 위해 작동하지 않습니다. – jiashie