2013-12-11 6 views
1

Android> = 4를 타겟팅 중이며 ActionBar에 문제가 있습니다.Android invalidateOptionsMenu가 작업 표시 줄을 업데이트하지 않습니다.

동적으로 동작 표시 줄을 업데이트해야하며 모든 코드가 Nexus 7 및 Nexus 4에서 정상적으로 작동하는 것 같습니다. 문제는 Xperia S (Android 4.1.2)입니다. Nexus 기기는 즉시 ActionBar를 업데이트합니다. 하드웨어 메뉴 버튼을 누르면 Xperia 만 업데이트됩니다.

나는 모든 장치에서 onPrepareOptionsMenu (메뉴 메뉴)를 성공적으로 호출하는 invalidateOptionsMenu()를 호출합니다. 차이점은 Xperia가 단순히 디스플레이를 업데이트하지 않는다는 것입니다. 하드웨어 메뉴 버튼을 클릭하자마자 메뉴 항목과 버튼이 팝업됩니다.

나는 많은 게시물을 읽었으며 수많은 방법을 시도해 보았습니다. Xperia를 제대로 작동시키지 못했습니다.

+0

ActionBarSherlock 라이브러리와 동일한 문제가 있습니다. API> = 4.2에서는 제대로 작동하지만 4.0 <= API <4.2 장치에서는 작동하지 않습니다. 아직 해결책이 없기 때문에 눈에 보이지 않는 보이는 버튼에 수표를 추가해야만했지만 해결할 수는 없습니다. –

답변

0

나는 이걸로 혼란스러워했고 내가 누릴 수있는 최선의 방법은 사용자 경험을 제공하고 받아 들일 수없는 활동을 재창조하는 것입니다.

소프트 메뉴 버튼이있는 기기에서는 모든 것이 잘 작동합니다. 하드웨어 메뉴 버튼이있는 장치의 작업 표시 줄 드롭 다운 메뉴에 모든 메뉴 항목을 강제로 적용하기로 결정했습니다.

작업의 onCreate에서 하드웨어 메뉴 버튼을 감지했습니다.

this.hardwareMenuButton = ViewConfiguration.get(getApplicationContext()).hasPermanentMenuKey(); 

그런 다음이 항목이 있습니다.

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 

    MenuItem menuItem = menu.add("Refresh");   
    if(this.hardwareButton) { 
     menuItem.setShowAsActionFlags(android.view.MenuItem.SHOW_AS_ACTION_NEVER); 
    } else { 
     menuItem.setIcon(R.drawable.ic_action_refresh); 
     menuItem.setShowAsActionFlags(android.view.MenuItem.SHOW_AS_ACTION_IF_ROOM); 
    } 

    return super.onPrepareOptionsMenu(menu); 

} 
관련 문제