java - 如何在 ViewPager 中使用 Fragments 隐藏和显示 FloatingActionButton?

标签 java android android-fragments

我试图只在一个 fragment 上显示我的 FloatingActionButton 并隐藏在其余 fragment 上。我尝试了多个答案,但没有任何效果。我试过这个解决方案:

Hide a Floating Action Button of another Layout

但它不起作用。我尝试在两个 fragment 上添加按钮,一个显示 FAB,一个隐藏 FAB 并且有效,但是一旦我删除按钮,它就不会自动显示。这是我的代码:

隐藏 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>

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>

隐藏 fragment .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;
    }

}

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;
    }

}

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

public FloatingActionButton getFloatingActionButton() {
    return fab;
}

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

public void hideFloatingActionButton() {
    fab.hide();
}

我目前的方法行不通。当我启动应用程序时,启动的第一个 fragment 是 HiddenFragment。但是当我转到 ShownFragment 时,FAB 没有出现。我尝试了一种不同的方法,我向每个 fragment 添加了一个按钮,并将 showFloatingActionButton() 和 hideFloatingActionButton() 添加到按钮,并且有效。有谁知道我做错了什么?

最佳答案

要在 ViewPager 中显示/隐藏带 fragment 的 FloatingActionButton,只需使用 ViewPager.OnPageChangeListener 并在您想要的位置显示 FloatingActionButton,并在您想要的位置隐藏它。

这将进入 Activity :

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) {

            }
        });

关于java - 如何在 ViewPager 中使用 Fragments 隐藏和显示 FloatingActionButton?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37356207/

相关文章:

java - 使用 Tomcat 提供所有 Web 内容

java - Spring实例化了bean但无法使用

java - 如何在 Java 中比较字符串?

android - 封装ViewHolder功能以供重用

java - Android Fragment Manager 的提交导致应用程序关闭

java - Jenkins 不会在自由风格项目上使用环境变量过滤 Maven 资源

java - 从android部分发送图像并从pc接收它,但是图像已损坏

android - 相机 Intent 后 NFC 停止在设备上工作

android - Android APK 文件的内容是什么

android - 为什么我会收到 Error inflating class fragment?