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;
}
}
}
동일한 작업을 수행합니다 (supportInvalidateOptionsMenu는 invalidateOptionsMenu를 호출하기 만합니다) – Jamie