我使用在我的主机活动 MenuActivity 中实现的NavigationDrawer模式。我的导航有3个项目:项目1,项目2,项目3。 每个项目都绑定到一个片段。
当我点击第1项时,我显示了一个片段A,它实现了一个带有多个片段(嵌套片段)的ViewPager。
在我的嵌套片段中,我使用以下方法给菜单充气(它运行正常!):
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.my_menu, menu);
super.onCreateOptionsMenu(menu, inflater);
}
但是当我点击我的菜单的另一个元素(第2项 - >显示片段B或第3项>显示片段C)时,我的菜单(在我的嵌套片段中膨胀)始终可见但我希望它消失。
你能解决这个问题吗?提前谢谢。
答案 0 :(得分:2)
当我遇到这个问题时,我通过为子片段和“根”片段设置setHasOptionMenu(true)
来解决它。如果“root”片段或其他子片段不使用选项,那么无论如何它都没问题,因为你只需要在需要它的子片段中给菜单充气。
答案 1 :(得分:1)
我刚刚遇到问题并通过以下方式解决了问题:
<div class="banner">
</div>
<div class="inner">
<div class="left"></div>
<div class="main"></div>
<div class="right"></div>
</div>
我注意到onDestroyOptionsMenu没有被调用,所以我只是通过OnDestroyView方法调用它,并将菜单可见性设置为@Override
public void onDestroyOptionsMenu() {
this.setMenuVisibility(false);
super.onDestroyOptionsMenu();
Log.e(TAG, "onDestroyOptionsMenu");
}
@Override
public void onDestroyView() {
onDestroyOptionsMenu();
super.onDestroyView();
}
。
答案 2 :(得分:1)
只需保存子片段,然后覆盖setMenuVisability:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#define MAX_LINE_LENGTH (256)
// prototypes
void source_to_destination(FILE *source , FILE *destination);
int main( int argc, char * argv[] )
{
if( 3 != argc )
{ // not correct number of command line parameters
fprintf( stderr, "USAGE: %s <sourceFili> <destinationFile>\n", argv[0]);
exit( EXIT_FAILURE );
}
// implied else, correct number of arguments
FILE *fp_in = NULL;
if( NULL == (fp_in = fopen( argv[1], "r") ) )
{ // then fopen failed
fprintf( stderr, "fopen for input file: %s failed due to %s\n", argv[1], strerror(errno) );
exit( EXIT_FAILURE );
}
// implied else, fopen input file successful
FILE *fp_out = NULL;
if( NULL == (fp_out = fopen( argv[2], "w") ) )
{ // then fopen failed
fprintf( stderr, "fopen for output file: %s failed due to %s\n", argv[2], strerror(errno) );
fclose( fp_in ); // cleanup
exit( EXIT_FAILURE );
}
// implied else, fopen output file successful
source_to_destination( fp_in, fp_out );
fclose( fp_in );
fclose( fp_out );
return 0;
} // end function: main
void source_to_destination(FILE *source , FILE *destination)
{
char line[ MAX_LINE_LENGTH ];
while(fgets(line,sizeof(line),source) )
{
if( EOF == fputs(line,destination) )
{ // then fputs failed
fprintf( stderr, "fputs to output file failed due to %s\n", strerror(errno) );
fclose( source );
fclose( destination );
exit( EXIT_FAILURE );
}
}
} // end function: source_to_destination
它对我有用
答案 3 :(得分:0)
与SafiS的回答略有不同:
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public View onCreateView(...) {
View view = ...
setMenuVisibility(true);
return view;
}
@Override
public void onDestroyView() {
setMenuVisibility(false);
super.onDestroyView();
}
答案 4 :(得分:-1)
在setRetainInstance(true)
的片段中添加setHasOptionMenu(true)
和onCreate()
。