我试图在我的操作栏中显示/隐藏项目,具体取决于可见的片段.
在我的MainActivity中,我有以下内容
/* Called whenever invalidateOptionsMenu() is called */
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if(this.myFragment.isVisible()){
menu.findItem(R.id.action_read).setVisible(true);
}else{
menu.findItem(R.id.action_read).setVisible(false);
}
return super.onPrepareOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud)
然而,这很有效,当设备旋转时会出现问题.旋转完成后,再次调用PrepareOptionsMenu,但是这次this.myFragment.isVisible()返回false ...因此,当片段清晰可见时,菜单项将被隐藏(至于屏幕上显示的内容).
es0*_*329 25
基于片段API指南,我们可以基于每个片段将操作栏添加到操作栏,步骤如下:创建一个res/menu/fooFragmentMenu.xml包含菜单项的菜单项,就像通常用于标准菜单一样.
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/newAction"
android:orderInCategory="1"
android:showAsAction="always"
android:title="@string/newActionTitle"
android:icon="@drawable/newActionIcon"/>
</menu>
Run Code Online (Sandbox Code Playgroud)
在FooFragment的onCreate方法的顶部,指示它有自己的菜单项要添加.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
...
}
Run Code Online (Sandbox Code Playgroud)
覆盖onCreateOptionsMenu,您将在其中夸大片段的菜单并将其附加到标准菜单.
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.fooFragmentMenu, menu);
super.onCreateOptionsMenu(menu, inflater);
}
Run Code Online (Sandbox Code Playgroud)
覆盖片段中的onOptionItemSelected,只有当主机Activity/FragmentActivity的相同方法看到它没有选择的大小写时,才会调用它.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.newAction:
...
break;
}
return super.onOptionsItemSelected(item);
}
Run Code Online (Sandbox Code Playgroud)
小智 -3
编辑:这是一个快速而肮脏的修复,请参阅下面es0329 的答案以获得更好的解决方案。
尝试将此属性添加到activityAndroid 清单中的标记中:
android:configChanges="orientation|screenSize"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5265 次 |
| 最近记录: |