2013-01-11 2 views
1

내가 안드로이드 4.0.4에, HTC T - 모바일 다음 misfeature를 참조 수정 "시작"버튼을 "중지"버튼으로 대체). 불행히도 오버 플로우 메뉴가 사라지고 최소한 하나의 메뉴 항목이 "손실"됩니다. 처음에는 "추가"메뉴 항목이 다른 경우 "설정"메뉴 항목으로 바뀌 었습니다. 이것은 2.항목은

안드로이드에 발생하지 않습니다

(I는 해결 방법을 발견하고 다른 만남을 경우 누군가이 문제이를 게시하고)

답변

1

해결 방법은 표시되는 항목의 수를 줄일 수 있도록되어 있지 않습니다 . Android 4는 필요없는 경우 '추가'항목을 삭제하지만 다시 필요할 때 추가 할 수 없습니다.

나는

private void doPrepareOptionsMenu(Menu menu) { 
    boolean running = ...; 
    if (running) { 
     menu.findItem(R.id.menu_stop).setVisible(running); 
     menu.findItem(R.id.menu_start).setVisible(!running); 
    } else { 
     menu.findItem(R.id.menu_start).setVisible(!running); 
     menu.findItem(R.id.menu_stop).setVisible(running); 
    } 
} 

private void doPrepareOptionsMenu(Menu menu) { 
    boolean running = ...; 
    menu.findItem(R.id.menu_stop).setVisible(running); 
    menu.findItem(R.id.menu_start).setVisible(!running); 
} 

에서 내 코드를 변경하고 문제가 사라졌다. 차이점은 먼저 항목을 보이게 한 다음 다른 항목을 보이지 않게 만드는 것입니다.

이 경우 당신이 실행시에 안드로이드이 메뉴를 변경하지, 어떤 상황이 그것을 작동하는 방법 :

SomeListener someListener = new SomeListener() { 
    public void someStateChanged() { 
     // This runs NOT on the UI thread 
     runOnUiThread(new Runnable() { 
      public void run() { 
       updateUI(); 
      } 
     }); 
    } 
} 

updateUI() 마지막으로, onPrepareOptionsMenu() 물론, 코드

Menu menu = weakRefOptionsMenu.get(); 
if (null != menu) { 
    doPrepareOptionsMenu(menu); 
} 

를 호출하고 전화 번호 doPrepareOptionsMenu() :

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    doPrepareOptionsMenu(menu); 
    return true; 
} 
1

Rela 원래 문제와 관련이있는 것은 기본적으로 보이지 않는 단일 메뉴 항목이있는 경우입니다. 이 항목을 일부 논리에 따라 런타임에 표시하려는 경우 4.0.4 장치에는 표시되지 않습니다. 해결 방법은 사용할 수없는 빈 제목의 보이는 항목을 포함하는 것입니다.

<item 
    android:title="" 
    android:visible="true" 
    android:enabled="false" 
    android:showAsAction="ifRoom"/> 

<item 
    android:id="@+id/my_item" 
    android:title="My Item" 
    android:visible="false" 
    android:showAsAction="ifRoom"/>