我有一個應用程序與兩個活動主持片段。我的主要活動託管一個片段,並且該片段能夠定義並膨脹工具欄中的菜單,沒有問題。片段的onCreateOptionsMenu方法從來沒有被調用
雖然在第二個活動中,它使用FragmentStatePagerAdapter
來允許項目之間的水平滾動,但我的片段似乎無法在工具欄中定義菜單。
檢查:
- 我的整個應用程序設置爲使用a theme(
android:theme="@style/AppTheme"
)based onTheme.AppCompat.Light.DarkActionBar
。 - 我的片段延伸
android.support.v4.app.Fragment
setHasOptionsMenu(true);
是從片段的onCreate()
方法called- 的hosting activity延伸
AppCompatActivity
並沒有實現工具欄菜單本身 - 我的片段overrides
void onCreateOptionsMenu(Menu, MenuInflater)
,但這種方法似乎從來不會被調用
You can have a look at the commit that is supposed to add that menu on GitHub.(or even lo 。確定的代碼,可能是錯誤的原因的任何部分)
這裏是大線:
CrimeFragment.java
:
public class CrimeFragment extends Fragment {
// ...
@Override
public void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "onCreate()");
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
UUID id = (UUID) getArguments().getSerializable(ARG_CRIME_ID);
Log.d(TAG, String.format("Crime id in intent's extra: %s", id.toString()));
mCrime = CrimeLab.get(getActivity()).getCrime(id);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
Log.d(TAG, "onCreateOptionsMenu()"); // <= Never shows in the Android Monitor
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.fragment_crime, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_item_delete_crime:
CrimeLab.get(getActivity()).deleteCrime(mCrime);
getActivity().finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
// ...
}
是有什麼我做錯了什麼?
您應該使用onPrepareOptionMenu()方法在片段中使用菜單。 –
@Divyesh謝謝。不幸的是,即使在我的片段中嘗試覆蓋該方法(使用's':'onPrepareOptionsMenu'),它也不會被調用... –
您的第二個Activity是否定義菜單項? –