我的 Fragment 用特定的选项项替换了父 Activity 选项,但是当我单击该项目时,即使我已经覆盖了 Fragment 中的方法,也只有 Activity 的 onOptionItemSelected
被调用。我错过了什么吗?
fragment 的方法:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
Log.d(TAG, "Fragment.onCreateOptionsMenu");
if (mPasteMode) {
menu.clear();
inflater.inflate(R.menu.contexual_paste, menu);
getActivity().getActionBar().setTitle("PasteMode");
}
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Log.d(TAG, "Fragment.onOptionsItemSelected");
switch (item.getItemId()) {
case R.id.context_action_paste:
Toast.makeText(getActivity(),
"It worked ",
Toast.LENGTH_SHORT).show();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Activity的方法:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Log.d(TAG, "MainActivitiy.onOptionsItemSelected");
switch (item.getItemId()) {
case R.id.action_refresh:
Toast.makeText(this, "Action Refresh selected", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return true;
}
Logcat 输出:
MainActivity.onCreateOptionsMenu
Fragment.onCreateOptionsMenu
MainActivitiy.onOptionsItemSelected
那么我怎样才能调用 fragment 的 onOptionsItemSelected
呢?
最佳答案
如果您的 Activity 的 onOptionsItemSelected 方法返回 true,调用会在 Activity 中消耗,而 Fragment 的 onOptionsItemSelected 不会被调用。强> 因此,在您的 Activity onOptionsItemSelected 方法中返回 false 或通过 super.onOptionsItemSelected 调用的父类实现(默认实现返回 false)。
根据Activity类javadoc,Activity.onOptionsItemSelected方法应该:
Return false to allow normal menu processing to proceed, true to consume it here
关于android - fragment 的 onOptionsItemSelected 没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18133443/