Sal*_*lu3 15 android android-fragments android-optionsmenu android-actionbar
我在viewpager中有三个片段.
其中两个片段有自己的onCreateOptionsMenu方法版本:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
// Set up 1 action button
inflater.inflate(R.menu.home_snapshot_add, menu);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
// Set up 2 action buttons
inflater.inflate(R.menu.home_snapshot_send, menu);
}
Run Code Online (Sandbox Code Playgroud)
home活动有一个基本的onCreateOptionsMenu方法:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return false;
}
Run Code Online (Sandbox Code Playgroud)
在onCreate方法中,每个片段都调用该方法:
setHasOptionsMenu(true);
Run Code Online (Sandbox Code Playgroud)
每个菜单项都有标签:
android:showAsAction="always"
Run Code Online (Sandbox Code Playgroud)
好像我打开Activity一样,所有三个按钮都出现了.然而,当我滚动它们时,错误的那些神奇地消失了.感觉就像活动在Activity创建时调用每个Fragment的选项菜单,然后在我向左和向右滑动时适当地更改菜单.我检查了菜单,但不确定是什么问题.您认为我需要检查的任何事情?我有点想法了.
谢谢!
Nik*_*ski 17
在您ViewPager
的OnPageChangeListener
设置和将适配器设置为之后ViewPager
,请执行以下操作:
@Override
public void onPageSelected(int position){
invalidateFragmentMenus(position);
}
private void invalidateFragmentMenus(int position){
for(int i = 0; i < mViewPagerFragentAdapter.getCount(); i++){
mViewPagerAdapter.getItem(i).setHasOptionsMenu(i == position);
}
invalidateOptionsMenu(); //or respectively its support method.
}
Run Code Online (Sandbox Code Playgroud)
设置片段适配器后,使用以下参数调用相同的方法:
invalidateFragmentMenus(mViewPager.getCurrentItem());
Run Code Online (Sandbox Code Playgroud)
以上语句将阻止所有其他片段在调用onCreateOptionsMenu()
时不接收方法invalidateOptionsMenu()
调用,只有当前可见的片段将接收并能够填充选项菜单.
归档时间: |
|
查看次数: |
9106 次 |
最近记录: |