如何在Fragment中创建选项菜单?

时间:2019-08-18 14:55:16

标签: android android-fragments

我正在编写需要创建选项菜单的代码,我遵循了一些有关如何在片段活动中实现此菜单的教程,但是由于某些原因,我正在使用的代码未显示该菜单。有人知道会是什么吗?

ProfileFragment

public class ProfileFragment extends Fragment {

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_profile, container, false);

}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    setHasOptionsMenu(true);
    super.onCreate(savedInstanceState);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.profile_menu, menu);
    super.onCreateOptionsMenu(menu, inflater);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    switch (id) {
        case R.id.edit_profile:
            break;
        case R.id.change_password:
            break;
        case R.id.log_out:
            break;

    }
    return super.onOptionsItemSelected(item);
 }
}

XML

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#10c0bd"
            android:minHeight="?attr/actionBarSize"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
            app:theme="@style/ThemeOverlay.AppCompat.Dark" />

3 个答案:

答案 0 :(得分:0)

可能是因为您尝试在setHasOptionsMenu(true);而非OnCreate上设置OnCreateView

尝试从setHasOptionsMenu(true);删除OnCreate并将其添加到OnCreateView

答案 1 :(得分:0)

尝试一下

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
inflater.inflate(R.menu.profile_menu, menu);
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
} 

答案 2 :(得分:0)

首先在片段中覆盖创建方法,然后编写 setHasOptionsMenu(true)

  @Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}

然后在Fragment中覆盖OnPrepareOptionMenu方法,然后编写放置在其中的代码。 我只隐藏搜索菜单。同样,您可以根据自己的选择隐藏所有菜单项或选择项。

   @Override
public void onPrepareOptionsMenu(Menu menu) {
    MenuItem item=menu.findItem(R.id.menu_search);
    if(item!=null)
        item.setVisible(false);
}