【Android】嵌套Fragment无法接收onCreateOptionsMenu事件的问题
前言
嵌套的二级Fragment无法接收onCreateOptionsMenu事件的问题,设置了setHasOptionsMenu也不管用。
声明
欢迎转载,但请保留文章原始出处:)
博客园:http://www.cnblogs.com
农民伯伯: http://www.cnblogs.com/over140/
正文
补充说明:
如果通过缓存Fragment手动调用二级Fragment,可能会出现莫名其妙的问题,比如更多Menu不显示。
解决办法:
在一级Fragment中添加Menu,可以在一级onOptionsItemSelected中手动调用二级的此方法来处理相关事件。
示例代码:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
switch (getSelectedPosition()) {
case 1:
inflater.inflate(R.menu.menu1, menu);
break;
case 2:
inflater.inflate(R.menu.menu2, menu);
break;
case 0:
default:
inflater.inflate(R.menu.menu3, menu);
break;
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Fragment fragment = getFragmentByPosition(getSelectedPosition());
if (fragment != null)
fragment.onOptionsItemSelected(item);
return super.onOptionsItemSelected(item);
}
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
switch (getSelectedPosition()) {
case 1:
inflater.inflate(R.menu.menu1, menu);
break;
case 2:
inflater.inflate(R.menu.menu2, menu);
break;
case 0:
default:
inflater.inflate(R.menu.menu3, menu);
break;
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Fragment fragment = getFragmentByPosition(getSelectedPosition());
if (fragment != null)
fragment.onOptionsItemSelected(item);
return super.onOptionsItemSelected(item);
}
代码说明:
示例代码是一级Fragment,getFragmentByPosition返回的是二级Fragment。
相关文章:
【Andorid X 项目笔记】嵌套Fragment的使用(5)