fragment中toolbar的一些坑

之前一直都不知道toolbar是可以被作为一个独立的控件使用的,每一次都会在初始化fragment时都会调用 ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar)

问题来了!!!
如果你的几个fragment是在一个activity上的,那么你的toolbar可能会出先一些神奇的bug,比如设置menu菜单不显示,toolbar会显示莫名其妙的东西之类的,具体原因我也不知道为什么,希望大佬解答!

那我们要怎么做呢?
toolbar既然可以作为一个独立的控件,在findViewById后直接调用toolbar自带的方法来处理menu显示点击问题即可,无需调用((AppCompatActivity) getActivity()).setSupportActionBar(toolbar)为fragment设置toolbar

//不加这行菜单无法显示,告诉fragment我们有菜单的
setHasOptionsMenu(true);

//加载菜单
mToolbar.inflateMenu(R.menu.market_menu);

//设置菜单点击事件
mToolbar.setOnMenuItemClickListener(item -> {
if (item.getItemId() == R.id.order) {
Toasty.info(getContext(), "订单", Toasty.LENGTH_SHORT).show();
} else if (item.getItemId() == R.id.shopping_cart) {
Toasty.info(getContext(), "购物车", Toasty.LENGTH_SHORT).show();
}
return true;
});

至于这两个重写方法
@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
return super.onOptionsItemSelected(item);
}
就不需要调用了,用上文所说的toolbar自带的加载菜单方法和菜单点击事件方法即可

为了避免以后再遇到,写在这里给自己一个提示

你可能感兴趣的:(fragment中toolbar的一些坑)