我在一个activity下有10个fragment,该怎么隐藏其中3个的标题栏
public class PersoncenterFragment extends Fragment {
private FragmentPersoncenterBinding binding;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
PersoncenterViewModel personcenterViewModel =
new ViewModelProvider(this).get(PersoncenterViewModel.class);
binding = FragmentPersoncenterBinding.inflate(inflater, container, false);
View root = binding.getRoot();
return root;
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
}
要隐藏Fragment的标题栏,您需要在该Fragment所属的Activity中进行操作。在Activity中,您可以通过获取FragmentManager中指定的Fragment实例并设置其选项菜单可见性来隐藏标题栏。例如,如果您要隐藏三个Fragment的标题栏,可以按照以下步骤进行操作:
1、在Activity中获取FragmentManager并获取指定的Fragment实例,例如:
FragmentManager fragmentManager = getSupportFragmentManager();
Fragment fragment1 = fragmentManager.findFragmentById(R.id.fragment1);
Fragment fragment2 = fragmentManager.findFragmentById(R.id.fragment2);
Fragment fragment3 = fragmentManager.findFragmentById(R.id.fragment3);
2、在每个要隐藏标题栏的Fragment中,实现 onCreateOptionsMenu 方法并设置菜单为空,例如:
@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
menu.clear(); //设置菜单为空
}
3、在Activity的 onCreate 方法中,为每个要隐藏标题栏的Fragment设置选项菜单可见性,例如:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取FragmentManager并获取指定的Fragment实例
FragmentManager fragmentManager = getSupportFragmentManager();
Fragment fragment1 = fragmentManager.findFragmentById(R.id.fragment1);
Fragment fragment2 = fragmentManager.findFragmentById(R.id.fragment2);
Fragment fragment3 = fragmentManager.findFragmentById(R.id.fragment3);
// 隐藏指定Fragment的标题栏
if (fragment1 != null) {
fragment1.setHasOptionsMenu(true); // 设置选项菜单可见
}
if (fragment2 != null) {
fragment2.setHasOptionsMenu(true); // 设置选项菜单可见
}
if (fragment3 != null) {
fragment3.setHasOptionsMenu(true); // 设置选项菜单可见
}
}
在这个示例中,setHasOptionsMenu(true) 方法用于设置选项菜单可见性,将其设置为true表示可见,false表示不可见。因此,将其设置为true可以隐藏指定Fragment的标题栏。
(1) 如何获取Fragment的引用
要在Android中隐藏某一选定fragment的标题栏,可以通过以下步骤实现:
getSupportActionBar().hide();
如果你的activity没有使用support library中的ActionBar,可以使用以下代码隐藏标题栏:
getActionBar().hide();
@Override
public void onResume() {
super.onResume();
((AppCompatActivity) getActivity()).getSupportActionBar().hide();
}
注意,这里需要使用AppCompatActivity,因为我们要使用getSupportActionBar()来获取标题栏的实例。
完整的代码如下:
public class Fragment1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment1, container, false);
}
@Override
public void onResume() {
super.onResume();
((AppCompatActivity) getActivity()).getSupportActionBar().hide();
}
}
public class Fragment2 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment2, container, false);
}
@Override
public void onResume() {
super.onResume();
((AppCompatActivity) getActivity()).getSupportActionBar().hide();
}
}
public class Fragment3 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment3, container, false);
}
@Override
public void onResume() {
super.onResume();
((AppCompatActivity) getActivity()).getSupportActionBar().hide();
}
}
这样,在这三个fragment被展示时,其所在activity的标题栏就会被隐藏。其他的fragment仍然会显示标题栏。