2013-08-17 1 views
0

작업 표시 줄 및 작업 표시 줄에 메뉴가 있습니다.하드 메뉴 버튼을 터치하면 Android getActionBar()가 null을 반환합니다.

하드 메뉴 버튼을 터치하면 getActionBar()이 null을 반환합니다. 나뿐만 충돌 응용 프로그램을 방지 할 수 있습니다

hard menu button

: 하단에

셋째 열심히 메뉴 버튼을 의미하는 것입니다 if(getActionBar() != null) { // ... }

을하지만 내가하고 싶은 게 아니에요. 수정 (추가/제거)하려면 작업 표시 줄 항목이 필요합니다. 따라서 getActionBar()이 null을 반환하는 동안 나는 할 수 없습니다.

누군가 getActionBar()이 null을 반환하는 이유는 무엇입니까? 새로 고침 내가 (액션 뷰가 새로 고침 보여주기 위해 클릭 한 후 바로 XML로 설정 액션보기를 제거 완료 후, 내 활동에

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
     if (getActionBar() != null) { // Action bar is null here when I click hard menu button. 
       getActionBar().setDisplayHomeAsUpEnabled(true); 
     } 

     // Some logical operations here. 

    // Get the menu. 
    BaseActivity.menuOnActionBar = menu; 
    return super.onCreateOptionsMenu(menu); 
} 

:

는 UPDATE : 여기

내 코드입니다 진행 표시 줄) : BaseActivity

menuOnActionBar.findItem(R.id.menu_refresh).setActionView(null); // This throws an error. 

그리고 menuOnActionBar 변수 정의 :

public static Menu menuOnActionBar; 

슬로우 오류는 다음과 같습니다 E/AndroidRuntime(4193): java.lang.NullPointerException

+0

getSupportActionBar()를 호출 할 "바닥에서 세 번째가 열심히 메뉴 버튼을 의미하는 것입니다"- 아이콘에 따라, 즉, 최근 통화 버튼이 아닌 MENU 버튼입니다. – CommonsWare

+0

@CommonsWare true이지만, HTC가 메뉴 버튼처럼 동작하도록 변경할 수 있다고 생각합니다 (오래된 앱의 경우 화면에 거대한 메뉴 버튼이 있다는 사용자의 불만 때문에). –

+1

@JustWork 몇 가지 코드를 보여 주시겠습니까? 그것은 당신이 무엇을 원하는지 확실하지 않다 ... –

답변

0

내가 (/ 제거를 추가), 수정하는 작업 표시 줄의 항목이 필요합니다. 어쨌든 ActionBar을 통해 작업 표시 줄의 항목에 영향을 미칠 수 없기 때문에 먼저

, 당신은이에 대한 ActionBar 인스턴스를 필요가 없습니다. 작업 표시 줄 항목을 추가하거나 제거하는 경우 call invalidateOptionsMenu() on your Activity을 입력하면 Android가 onCreateOptionsMenu()에 다시 전화 할 수 있습니다.

더 중요한 것은, 메뉴 언론의 결과로 그렇게해서는 안되며, 너무 늦었을 때입니다. 대신, 작업 막대 항목의 혼합을 변경해야하는 응용 프로그램의 상태가 변경되면 invalidateOptionsMenu()으로 전화하십시오.

작업 표시 줄 (예 : 탭)에 대해 다른 내용을 변경해야하는 경우 getActionBar()이 더 적합합니다. 두 시나리오가있는 나는 null를 반환합니다 getActionBar() 것을 알고 :

  • 당신은 당신이 필요로하는 경우에 당신은 ActionBarSherlock의 클래스를 (예를 들어, SherlockActivity) 확장하고

  • 작업 표시 줄을 가지고 있지 않습니다

관련 문제