2013-07-01 3 views
3

SherlockFragment.onCreateView에서 SherlockFragmentActivity.supportInvalidateOptionsMenu를 호출 할 수 있습니까? 나는 달리 말하지 않는 것을 발견 할 수는 없지만 이렇게하면 메뉴 항목에 대한 클릭이 활동을 종료 할 때까지 처리되지 않을 수 있습니다. (이것은 API 8 에뮬레이터에서 발생합니다).onCreateView에서 supportInvalidateOptionsMenu를 호출 할 수 있습니까? (actionbarsherlock 용)

이 동작은 매우 간단합니다. 어떤 이유로 액티비티가 메뉴 항목을 추가하지 않았지만 조각이 수행 한 경우에만 발생합니다.

다음은 누군가가 관심이있는 경우 repro 코드입니다. 배경은 빨간색으로 변하지 않을 것입니다. 그러나 getSherlockActivity(). supportInvalidateOptionsMenu()를 주석 처리하면 빨간색으로 변합니다.

public class MainActivity extends SherlockFragmentActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.frag_container); 

    FunFragment frag = new FunFragment(); 

    FragmentTransaction trans = getSupportFragmentManager().beginTransaction(); 
    trans.add(R.id.frag_container, frag, "foobar"); 
    trans.commit(); 
} 

}

public class FunFragment extends SherlockFragment { 
@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    setHasOptionsMenu(true); 

    super.onActivityCreated(savedInstanceState); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    getSherlockActivity().supportInvalidateOptionsMenu(); 
    return new View(getActivity()); 
} 

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    menu.add(0, 5, 0, "Do magic").setIcon(R.drawable.ic_launcher) 
      .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case 5: 
     getView().setBackgroundDrawable(new ColorDrawable(0xFFFF0000)); 
     return true; 
    default: 
     return false; 
    } 
} 

}

답변

-1

당신은 invalidateOptionsMenu() 대신 supportInvalidateOptionsMenu() 호출 할 수 있습니다.

+1

동일한 작업을 수행합니다 (supportInvalidateOptionsMenu는 invalidateOptionsMenu를 호출하기 만합니다) – Jamie

관련 문제