java - 如何让菜单选项菜单出现在 ViewPager 片段中?
问题描述
我有一个 FragmentActivity,其中有一个 ViewPager,需要在屏幕顶部的操作栏中有一个选项菜单。public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
我添加到 ViewPager 的片段中的调用永远不会被调用,因此永远不会创建选项菜单,也不会显示任何操作栏。
我已添加setHasOptionsMenu(true);
到public void onCreate(@Nullable Bundle savedInstanceState)
Fragments 中。我也尝试将选项菜单直接添加到包含 ViewPager 的 FragmentActivity 但这似乎也不起作用。
主要活动
public class MainActivity extends FragmentActivity {
private PagerAdaptor pager;
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_main);
setupPageViewer();
super.onCreate(savedInstanceState);
}
private void setupPageViewer() {
UIControlSurface cs = new UIControlSurface();
UIControlSurface cs2 = new UIControlSurface();
pager = new PagerAdaptor(getSupportFragmentManager());
pager.addPage(cs);
pager.addPage(cs2);
ViewPager v_pager = (ViewPager)super.findViewById(R.id.view_pager);
v_pager.setAdapter(pager);
v_pager.postInvalidate();
}
}
activity_main.xml
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/button_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="visible"
tools:context=".MainActivity">
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="visible" />
</android.support.constraint.ConstraintLayout>
UIControlSurface.java
public class UIControlSurface extends Fragment implements UIEditableListener{
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.ui_control_surface, container, false);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
Log.i("Menu Inflation", "Here i am!");// never logged
inflater.inflate(R.menu.navi, menu);
}
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.navi_enter_edit:
return true;
case R.id.navi_cancel:
return true;
}
return false;
}
}
ui_control_surface.xml
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/button_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/add_button"
style="@style/Widget.AppCompat.Button.Colored"
android:layout_width="52dp"
android:layout_height="54dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:text="+"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
通过在setHasOptionsMenu(true);
片段的 onCreate 方法中调用,我希望菜单被创建,但操作栏和选项菜单永远不会出现。片段按预期出现在 ViewPager 中,只是没有可见的选项菜单。
解决方案
推荐阅读
- java - 如何设置 Maven 在 Spring Boot 中构建特定文件夹?
- python - 在 tabWidget 内的 pyqt5 中使用 matplotlib 绘制另一个图形之前不清除图形
- python - 寻找两部分字母的轮廓
- ios - CVOpenGLESTextureCache & CVMetalTextureCache 正确使用
- java - 无法在 Java 中使用 Aspose PDF 从 PDF 文件中读取内容
- git - 将存储库文件夹链接到另一个非存储库文件夹
- ddev - 我做了一个“ddev start”,看到“web 服务不健康”和“web 服务健康检查超时”
- docker - Lando - 错误:未找到 appserver_1 的容器
- java - PrintStackTrace 导致我的程序崩溃。为什么?
- javascript - 在Javascript中按时间对日期列表进行排序