如何在ViewPager中隐藏和显示带有碎片的FloatingActionButton?

Ale*_*dez 3 java android android-fragments

我试图只在一个片段上显示我的FloatingActionButton并隐藏其余片段.我尝试了多个答案,但没有任何工作.我试过这个解决方案:

隐藏另一个布局的浮动操作按钮

但它没有用.我尝试在两个片段上添加按钮,一个显示,一个隐藏FAB并且可以正常工作,但是一旦我删除按钮,它就不会自动显示.这是我的代码:

hidden_​​fragment.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

shown_fragment.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

HiddenFragment.java:

public class HiddenFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        if (container == null) {
            return null;
        }
        View view = inflater.inflate(R.layout.hidden_fragment, container, false);

        final FloatingActionButton fab = ((MainActivity) getActivity()).getFloatingActionButton();

        if (fab != null) {
            ((MainActivity) getActivity()).hideFloatingActionButton();
        }

        return view;
    }

}
Run Code Online (Sandbox Code Playgroud)

ShownFragment.java:

public class ShownFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        if (container == null) {
            return null;
        }
        View view = inflater.inflate(R.layout.hidden_fragment, container, false);

        final FloatingActionButton fab = ((MainActivity) getActivity()).getFloatingActionButton();

        if (fab != null) {
            ((MainActivity) getActivity()).showFloatingActionButton();
        }

        return view;
    }

}
Run Code Online (Sandbox Code Playgroud)

在我的MainActivity.java中我有这个:

public FloatingActionButton getFloatingActionButton() {
    return fab;
}

public void showFloatingActionButton() {
    fab.show();
}

public void hideFloatingActionButton() {
    fab.hide();
}
Run Code Online (Sandbox Code Playgroud)

我目前的方式不起作用.当我启动应用程序时,启动的第一个片段是HiddenFragment.但是当我去ShownFragment时,FAB没有出现.我尝试了不同的方法,我为每个片段添加了一个按钮,并将showFloatingActionButton()和hideFloatingActionButton()添加到按钮中,并且可以正常工作.有谁知道我做错了什么?

Dan*_*ent 8

要在ViewPager中显示/隐藏带有Fragments的FloatingActionButton,只需使用a ViewPager.OnPageChangeListener并显示所需位置的FloatingActionButton,并将其隐藏到您想要的位置.

这将进入活动:

mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                switch (position) {
                case 0:
                    fab.hide();
                    break;
                case 1:
                    fab.show();
                    break;
                case 3:
                    fab.hide();
                    break;
                default:
                    fab.hide();
                    break;
                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
Run Code Online (Sandbox Code Playgroud)