Java android在特定片段中隐藏工具栏

Java android在特定片段中隐藏工具栏,java,android,android-fragments,toolbar,Java,Android,Android Fragments,Toolbar,我有一个我不知道如何解决的问题。如何将工具栏隐藏在一个特定的片段中,我已经在互联网上搜索过了,我发现的是交流活动和片段可以解决这个问题。但这对我根本不起作用,以下是我的代码: 主要活动: public class MainActivity extends ActionBarActivity implements like_frag.OnHideToolbar{ .... public void onHidingToolbar(int position){ Toolbar to

我有一个我不知道如何解决的问题。如何将工具栏隐藏在一个特定的片段中,我已经在互联网上搜索过了,我发现的是交流活动和片段可以解决这个问题。但这对我根本不起作用,以下是我的代码:

主要活动:

public class MainActivity extends ActionBarActivity implements like_frag.OnHideToolbar{

....

public void onHidingToolbar(int position){
        Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
        if(toolbar == null){
            getSupportActionBar().hide();
        }else{
            getSupportActionBar().hide();
        }
    }
比如_frag.java

public class like_frag extends Fragment {

    OnHideToolbar mCallback;
    Toolbar toolbar;

    public interface OnHideToolbar {
        public void onHidingToolbar(int position);
    }

    public void onAttach(Activity activity){

        try{
            mCallback = (OnHideToolbar) activity;
        }catch(ClassCastException e){
            throw new ClassCastException(activity.toString() + "error implementing");
        }
    }
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        View rootView = inflater.inflate(R.layout.swipefrag, container, false);

        toolbar = (Toolbar)getActivity().findViewById(R.id.toolbar);

        return rootView;
    }

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
    }
}
提前谢谢

我在工具栏里有一个抽屉


在片段的
onCreate
方法调用中:
((AppCompatActivity)getActivity()).getSupportActionBar().hide()

用您使用的活动类替换
AppCompatieActivity

已编辑

您可以简单地使用
onResume
方法调用
hide()
,使用
onStop
方法调用
show()
,正如一些注释中所建议的那样

@覆盖
恢复时公开作废(){
super.onResume();
((AppCompatActivity)getActivity()).getSupportActionBar().hide();
}
@凌驾
公共void onStop(){
super.onStop();
((AppCompatActivity)getActivity()).getSupportActionBar().show();
}

在片段中创建一个界面,并使用它告诉父活动隐藏工具栏

将这些行添加到片段中:

private OnEventListener listener;

public interface OnEventListener {

    void hideToolbar() ;
}

public void setOnEventListener(OnEventListener listener) {

    this.listener = listener;
}
在主活动中创建片段后,添加:

    myFragment.setOnEventListener(new MyFragment.OnEventListener() {
        @Override
        public void hideToolbar() {

            getSupportActionBar().hide();
        }
    });
每当需要隐藏工具栏时,请执行:

listener.hideToolbar();

从片段内部。

将此代码放入要隐藏工具栏的片段中

 @Override
public void onResume() {
    super.onResume();
    ((AppCompatActivity)getActivity()).getSupportActionBar().hide();
}
@Override
public void onStop() {
    super.onStop();
    ((AppCompatActivity)getActivity()).getSupportActionBar().show();
}

只需将这些方法添加到要禁用工具栏的片段中,并在片段的
onStop()
中使其再次可见即可

 @Override
    public void onResume() {
        super.onResume();
        ((AppCompatActivity)getActivity()).getSupportActionBar().hide();
    }

    @Override
    public void onStop() {
        super.onStop();
        ((AppCompatActivity)getActivity()).getSupportActionBar().show();
    }

将此代码放入要隐藏工具栏的片段中…

将此(((AppCompatActivity)getActivity()).getSupportActionBar().hide();)添加到onCreateView或onResume中

在onDestroy()中执行此操作


在kotlin中隐藏并显示
supportActionBar
,如下所示:

override fun onResume() {
    super.onResume()
    (activity as AppCompatActivity).supportActionBar?.hide()
}

override fun onStop() {
    super.onStop()
    (activity as AppCompatActivity).supportActionBar?.show()
}
如果您想拥有自己的自定义工具栏,请在
OncreateView
set中:

//your Custom toolbar in xml
val toolbar = binding.toolbar
(activity as AppCompatActivity).setSupportActionBar(toolbar)
如果您正在使用新工具栏,请在设置工具栏时添加此选项

navController.addOnDestinationChangedListener(new NavController.OnDestinationChangedListener() {
   @Override
   public void onDestinationChanged(@NonNull NavController controller,
           @NonNull NavDestination destination, @Nullable Bundle arguments) {
       if(destination.getId() == R.id.full_screen_destination) {
           toolbar.setVisibility(View.GONE);
           bottomNavigationView.setVisibility(View.GONE);
       } else {
           toolbar.setVisibility(View.VISIBLE);
           bottomNavigationView.setVisibility(View.VISIBLE);
       }
   }
});
对于Kotlin,您可以执行以下操作:

navController.addOnDestinationChangedListener { _, destination, _ ->
    if(destination.getId() == R.id.full_screen_destination) {
        toolbar.setVisibility(View.GONE)
        bottomNavigationView.setVisibility(View.GONE);
    } else {
        toolbar.setVisibility(View.VISIBLE)
        bottomNavigationView.setVisibility(View.VISIBLE);
    }
}

使用
getSupportActionBar().hide()
getSupportActionBar().show()在生命周期方法中

只需使用
supportActionBar?.hide()
supportActionBar?.show()
。 如果您使用的是NavigationController:

 navController.addOnDestinationChangedListener { controller, destination, arguments ->
        if (destination.id == R.id.loginSuccessFragment) {
            supportActionBar?.hide()
        } else {
            supportActionBar?.show()
        }
    }

已经试过了,但不起作用。我必须把它放在片段的onCreate()或onCreateView()中吗?OnActivityCreated或onCreateView类似于onCreate()或onCreateView()中的onCreateView:((ActionBarActivity)getActivity.getSupportActionBar().hide();它不起作用,还有其他想法吗?请在帖子中添加一些代码,以提高回答质量。离开该片段时,这不会再次显示工具栏。您需要显示它:getYourActivity().getSupportActionBar().show();正如@ODAXY所说,您需要调用getYourActivity().getSupportActionBar().show();在片段的onDestroy()方法上。这样,应用程序的其余行为就可以回滚了。它工作得非常好。我在stackoverflow中尝试了许多答案。但什么都没用。你救了我一天。谢谢。我也同意,这应该是正确的答案。这太棒了。一直试图从片段中调用它的
setVisibility()
.hide()
.show()
在片段中可以完美地工作。使用此选项时,请注意闪烁问题!我连续两天失眠,分析我的约束布局和底部导航,检查性能问题。@nandu你是如何解决的?当前,约束布局和底部导航面临同样的问题,它在重置之前不断拉长,这看起来很可怕。@Big_Chair我想我解决了这个问题,将它完全移除,并使用(activity as AppCompatActivity?)将其设置在需要的位置。setSupportActionBar(appbar)以下是Android解释
addOnDestinationChangedListener
对于初学者来说,确保getSupportActionBar()无法从Fragment访问也是值得注意的。如果需要,您需要调用getActivity()并进行强制转换。只需确保在
onPostCreate(savedInstanceState:Bundle?
中调用此函数,而不是
onCreate
onPostCreate(savedInstanceState:Bundle?、persistentState:PersistableBundle?
这会隐藏操作栏,但返回其他屏幕时,布局现在位于操作栏后面,向上移动。
 navController.addOnDestinationChangedListener { controller, destination, arguments ->
        if (destination.id == R.id.loginSuccessFragment) {
            supportActionBar?.hide()
        } else {
            supportActionBar?.show()
        }
    }