【问题标题】:How to hide BottomNavigation bar(Botton Navigation Bar Activity) in specific Fragment如何在特定片段中隐藏底部导航栏(按钮导航栏活动)
【发布时间】:2020-09-01 19:58:19
【问题描述】:

我知道我不是第一个提出这个问题的人,但我已经提到了很多关于这个问题的帖子,但我的问题没有得到解决。

我想要做的是在我的 MainActivity(底部导航栏活动)我有底部导航栏,在这个 MainActivity 我有卡片视图如果我点击卡片视图,我需要在该片段中显示另一个片段,我想隐藏底部导航栏。当我导航回 MainActivity 时,底部导航栏应该在那里。

在我的例子中,Alarm.java 是我想要隐藏底部导航栏的片段。

Alarm.java

public class Alarm extends Fragment {

    private OnFragmentInteractionListener mListener;

    public Alarm() {

    }

    public static Alarm newInstance(String param1, String param2) {
        Alarm fragment = new Alarm();
        Bundle args = new Bundle();
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {

        }
    }

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

    public void onButtonPressed(Uri uri) {
        if (mListener != null) {
            mListener.onFragmentInteraction(uri);
        }
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof OnFragmentInteractionListener) {
            mListener = (OnFragmentInteractionListener) context;
        } else {
            throw new RuntimeException(context.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }

    public interface OnFragmentInteractionListener {
        void onFragmentInteraction(Uri uri);
    }
}

【问题讨论】:

  • 您介意分享您迄今为止尝试过的东西,这样人们就不会推荐您已经尝试过的东西吗?例如,在您的片段中使用setSystemUiVisibility 方法不起作用吗?

标签: android android-fragments


【解决方案1】:

在您的MainActivity 中,您可以实现两种方法来负责显示和隐藏您的BottomNavigationView。例如,这两个方法动画它上下滑动:

private void hideBottomNavigationView(BottomNavigationView view) {
    view.clearAnimation();
    view.animate().translationY(view.getHeight()).setDuration(300);
}

public void showBottomNavigationView(BottomNavigationView view) {
    view.clearAnimation();
    view.animate().translationY(0).setDuration(300);
}

MainActivity 中,您在打开CardView 之前调用hide,然后在onCreateonResume 中调用show

编辑:

但是,我认为更简洁的方法可能是在您的 Fragment 中创建一个接口:

public interface OnCardViewOpenedInterface{
    void onOpen(); // hide bottom bar when photo is opened
    void onClose(); // show bottom bar when photo is opened
}

并在您的FragmentonStoponResume 中调用这些方法:

@Override
public void onStop() {
    super.onStop();
    mListener.onClose();
}

@Override
public void onResume() {
    super.onResume();
    mListener.onOpen();
}

然后在您的MainActivity 中实现接口,覆盖方法onOpen()onClose() 并在内部调用您的hideshow 方法。

他们可能都可以工作,也许第二个过于复杂,只是我更喜欢它。

【讨论】:

    【解决方案2】:

    我已经尝试过@Suleyman 的方法,但它对我不起作用。最简单的解决方案是在MainActivity 中使用public static 方法,并从要隐藏底部导航栏的片段中引用它。

    不要忘记将navView 初始化为public static

    在你的MainActivity

        public static void hideBottomNav(){
            navView.setVisibility(View.GONE);
        }
    
        public static void showBottomNav(){
            navView.setVisibility(View.GONE);
        }
    

    在你的MyFragment

        @Override
        public void onResume() {
            super.onResume();
            MainActivity.hideBottomNav();
        }
    
        @Override
        public void onStop() {
            super.onStop();
            MainActivity.showBottomNav();
        }
    

    【讨论】:

    • 虽然使用公共静态属性不是一个好习惯,但对于这个用例来说似乎不合理。
    • 是的,但似乎仍然有效且易于实施。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多